将 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())) 它总是一样的:将你所拥有的缩放到与当前时间相同的 scaleprint(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 纪元转换为日期对象的主要内容,如果未能解决你的问题,请参考以下文章

如何将 13 位 unix 纪元时间格式转换为日期时间?

oracle 将 unix 纪元时间转换为日期

将日期、时间和 UTC 偏移值转换为自 unix 纪元以来的毫秒数?

如何将自纪元以来的 Unix 时间/时间转换为标准日期和时间?

PostgreSQL:如何从 Unix 纪元转换为日期?

在 Google 表格中将 Unix 纪元时间转换为日期