【发布时间】:2012-11-07 12:27:17
【问题描述】:
我正在对均匀分布的时间序列进行绘图和计算。时间戳当前存储为整数,表示自 UNIX 纪元以来的秒数(例如1352068320),但Date 对象似乎更适合绘图。如何进行转换?
我已阅读 ?Date、?as.Date 和 ??epoch,但似乎错过了这些信息。
【问题讨论】:
我正在对均匀分布的时间序列进行绘图和计算。时间戳当前存储为整数,表示自 UNIX 纪元以来的秒数(例如1352068320),但Date 对象似乎更适合绘图。如何进行转换?
我已阅读 ?Date、?as.Date 和 ??epoch,但似乎错过了这些信息。
【问题讨论】:
通过POSIXct,您想在此处设置TZ——在这里您可以看到我的(芝加哥)默认设置:
R> val <- 1352068320
R> as.POSIXct(val, origin="1970-01-01")
[1] "2012-11-04 22:32:00 CST"
R> as.Date(as.POSIXct(val, origin="1970-01-01"))
[1] "2012-11-05"
R>
编辑:几年后,我们现在可以使用anytime 包:
R> library(anytime)
R> anytime(1352068320)
[1] "2012-11-04 16:32:00 CST"
R> anydate(1352068320)
[1] "2012-11-04"
R>
注意所有这些在没有任何格式或来源参数的情况下如何工作。
【讨论】:
1415560016876 这样的时间戳。 epochconverter.com 将其转换为没有问题的日期。你上面的代码给了我类似"46832-11-09 12:47:33 EDT"...
as.POSIXct(1415560016876/1000, origin="1970-01-01") 得到 "2014-11-09 13:06:56.875 CST" 并且您需要确保 seconds 是否是预期的(至于R) 或 毫秒.
print(as.numeric(Sys.time()))
print(as.numeric(Sys.time()), digits=16) 六位数是我的 Linux 系统。此外,您可以除以 1000;这不会截断。
使用library(lubridate),日期和时间的数字表示形式保存为自以来的秒数
1970-01-01 00:00:00 UTC,可以通过as_datetime() 强制转换为日期:
lubridate::as_datetime(1352068320)
[1] "2012-11-04 22:32:00 UTC"
【讨论】:
as.POSIXct(需要来源)或anytime。