将UNIX时代转换为Date对象


118

我正在绘制并在均匀分布的时间序列上执行计算。当前,时间戳记存储为整数,表示自UNIX纪元以来的秒数(例如1352068320),但是Date对象似乎更适合绘制。我如何进行转换?

我读过?Date?as.Date??epoch,但似乎已经错过了的信息。

Answers:


219

通过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> 

编辑:几年后,我们现在可以使用随时包:

R> library(anytime)
R> anytime(1352068320)
[1] "2012-11-04 16:32:00 CST"
R> anydate(1352068320)
[1] "2012-11-04"
R> 

请注意,所有这些如何在没有任何格式或原始参数的情况下工作


10
我有类似的时间戳1415560016876epochconverter.com可以毫无问题地将其转换为日期。您上面的代码给了我类似"46832-11-09 12:47:33 EDT"...
Hack-R

29
尝试将其除以1000:as.POSIXct(1415560016876/1000, origin="1970-01-01")获取“ 2014-11-09 13:06:56.875 CST”,您需要确保期望的秒数(与R一样)还是毫秒
Dirk Eddelbuettel 2014年

2
@Shambho:做相反的事情,看看你是否处于相同的数量级:print(as.numeric(Sys.time()))
Dirk Eddelbuettel 2015年

2
它始终是相同的:缩放所需的内容,使其达到与当前时间相同的缩放比例print(as.numeric(Sys.time()), digits=16)Linux系统使用六位数字表示。另外,您可以除以1000;这不会截断。
德克·埃德比布特

1
您如何从R变量中仅提取本地时间并转储日期?
Stratix

17

在中library(lubridate),日期和时间的数字表示形式保存为自1970-01-01 00:00:00 UTC以来的秒数,可以通过以下方式将其连成日期as_datetime()

lubridate::as_datetime(1352068320)

[1] "2012-11-04 22:32:00 UTC"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.