将 UNIX 纪元转换为日期对象
Posted
技术标签:
【中文标题】将 UNIX 纪元转换为日期对象【英文标题】:Convert UNIX epoch to Date object 【发布时间】:2012-11-07 12:27:17 【问题描述】:我正在对均匀分布的时间序列进行绘图和计算。时间戳当前存储为整数,表示自 UNIX 纪元以来的秒数(例如1352068320
),但Date
对象似乎更适合绘图。如何进行转换?
我已阅读 ?Date
、?as.Date
和 ??epoch
,但似乎错过了这些信息。
【问题讨论】:
【参考方案1】:通过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"
...
尝试将其除以 1000:as.POSIXct(1415560016876/1000, origin="1970-01-01")
得到 "2014-11-09 13:06:56.875 CST" 并且您需要确保 seconds 是否是预期的(至于R) 或 毫秒.
@Shambho:反过来看你是否处于同一数量级:print(as.numeric(Sys.time()))
它总是一样的:将你所拥有的缩放到与当前时间相同的 scale:print(as.numeric(Sys.time()), digits=16)
六位数是我的 Linux 系统。此外,您可以除以 1000;这不会截断。
如何从 R 变量中提取本地时间,然后转储日期?【参考方案2】:
使用library(lubridate)
,日期和时间的数字表示形式保存为自以来的秒数
1970-01-01 00:00:00 UTC,可以通过as_datetime()
强制转换为日期:
lubridate::as_datetime(1352068320)
[1] "2012-11-04 22:32:00 UTC"
【讨论】:
严格来说这是不正确的,因为它不是 lubridate,它具有“数字表示 [...] 作为秒数”,而是 base R 正如我四年前的答案已经显示的那样 - 所以我们这里有一个 lubridate 替代我之前已经显示的两个命令。 亲爱的@DirkEddelbuettel,感谢您的反馈。是的,这是 -lubridate- 替代方案。我的答案可以重新编辑为:日期和时间的数字表示保存为自 1970-01-01 00:00:00 UTC 以来的秒数,可以使用 lubridate::as_datetime() 强制转换为日期 当然。他们可以使用as.POSIXct
(需要来源)或anytime
。
我明白了。已更正以上是关于将 UNIX 纪元转换为日期对象的主要内容,如果未能解决你的问题,请参考以下文章
将日期、时间和 UTC 偏移值转换为自 unix 纪元以来的毫秒数?