r 从毫秒转换为小时和分钟
r Converting from milliseconds to Hours and Minutes
我有一组以毫秒为单位的时间,我想将其转换为 hh: mm。一个示例数据集是:
data <- c(5936500, 5438500, 3845400, 7439900, 5480200, 6903900)
我通过手动计算得到这个,但它没有为我提供正确的分钟值。
> data/1000/60/60
[1] 1.649028 1.510694 1.068167 2.066639 1.522278 1.917750
我试过了
format(as.POSIXct(Sys.Date())+data, "%H:%M")
[1] "12:01" "17:41" "07:10" "21:38" "05:16" "16:45"
但这还差得远。有什么想法吗?
谢谢!
hrs = data/(60 * 60 * 1000)
mins = (hrs %% 1) * 60
secs = (mins %% 1) * 60
paste(trunc(hrs), trunc(mins), round(secs, 2), sep = ":")
#[1] "1:38:56.5" "1:30:38.5" "1:4:5.4" "2:3:59.9" "1:31:20.2" "1:55:3.9"
此外,
library(lubridate)
seconds_to_period(data/1000)
#[1] "1H 38M 56.5S" "1H 30M 38.5S" "1H 4M 5.40000000000009S"
#[4] "2H 3M 59.8999999999996S" "1H 31M 20.1999999999998S" "1H 55M 3.89999999999964S"
我们可以得到的零点:
strftime(as.POSIXlt.numeric(0, format="%OS", origin="1970-01-01") - 7200, format="%R")
# [1] "00:00"
因此:
t.adj <- 0
res <- strftime(as.POSIXlt.numeric(v/1000, format="%OS", origin="1970-01-01") - t.adj*3600,
format="%R", tz="GMT")
res
# [1] "01:38" "01:30" "01:04" "02:03" "01:31" "01:55"
class(res)
# [1] "character"
日期无关紧要,因为:
class(res)
# [1] "character"
请注意, 此解决方案可能取决于您的 Sys.getlocale("LC_TIME")
。在上面的解决方案中有一个可选的小时调整 t.adj
*,但是在我的个人语言环境中它被设置为零以产生正确的值。
数据
v <- c(5936500, 5438500, 3845400, 7439900, 5480200, 6903900)
*要自动化本地化,您可能需要查看 this question.
的答案
我有一组以毫秒为单位的时间,我想将其转换为 hh: mm。一个示例数据集是:
data <- c(5936500, 5438500, 3845400, 7439900, 5480200, 6903900)
我通过手动计算得到这个,但它没有为我提供正确的分钟值。
> data/1000/60/60
[1] 1.649028 1.510694 1.068167 2.066639 1.522278 1.917750
我试过了
format(as.POSIXct(Sys.Date())+data, "%H:%M")
[1] "12:01" "17:41" "07:10" "21:38" "05:16" "16:45"
但这还差得远。有什么想法吗?
谢谢!
hrs = data/(60 * 60 * 1000)
mins = (hrs %% 1) * 60
secs = (mins %% 1) * 60
paste(trunc(hrs), trunc(mins), round(secs, 2), sep = ":")
#[1] "1:38:56.5" "1:30:38.5" "1:4:5.4" "2:3:59.9" "1:31:20.2" "1:55:3.9"
此外,
library(lubridate)
seconds_to_period(data/1000)
#[1] "1H 38M 56.5S" "1H 30M 38.5S" "1H 4M 5.40000000000009S"
#[4] "2H 3M 59.8999999999996S" "1H 31M 20.1999999999998S" "1H 55M 3.89999999999964S"
我们可以得到的零点:
strftime(as.POSIXlt.numeric(0, format="%OS", origin="1970-01-01") - 7200, format="%R")
# [1] "00:00"
因此:
t.adj <- 0
res <- strftime(as.POSIXlt.numeric(v/1000, format="%OS", origin="1970-01-01") - t.adj*3600,
format="%R", tz="GMT")
res
# [1] "01:38" "01:30" "01:04" "02:03" "01:31" "01:55"
class(res)
# [1] "character"
日期无关紧要,因为:
class(res)
# [1] "character"
请注意, 此解决方案可能取决于您的 Sys.getlocale("LC_TIME")
。在上面的解决方案中有一个可选的小时调整 t.adj
*,但是在我的个人语言环境中它被设置为零以产生正确的值。
数据
v <- c(5936500, 5438500, 3845400, 7439900, 5480200, 6903900)
*要自动化本地化,您可能需要查看 this question.
的答案