将UNIX纪元转换为Date对象

And*_*eas 109 time r r-faq

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

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

Dir*_*tel 205

通过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> 
Run Code Online (Sandbox Code Playgroud)

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

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

请注意所有这些如何工作,没有任何格式或原始参数.

  • 尝试将其除以1000:`as.POSIXct(1415560016876/1000,origin ="1970-01-01")`得到"2014-11-09 13:06:56.875 CST",你需要确保是否预期_seconds_(至于R)或_milliseconds_. (27认同)
  • 我有时间戳,如'1415560016876`.http://www.epochconverter.com/将此转换为没有问题的日期.你上面的代码给我的东西像`"46832-11-09 12:47:33 EDT"`... (10认同)
  • @Shambho:反过来看看你是否处于同一数量级:`print(as.numeric(Sys.time())) (2认同)
  • 它始终是相同的:扩展你所拥有的它与当前时间相同的_scale_:`print(as.numeric(Sys.time()),digits = 16)`六位数是我的Linux系统.另外,你*可以*除以1000; 这不会截断. (2认同)

Yur*_*nko 12

在lubridate库中,日期和时间保存为自1970-01-01 00:00:00 UTC以来的秒数。所以你可以做

    library(lubridate)
    as_datetime(1352068320)
[1] "2012-11-04 22:32:00 UTC"
Run Code Online (Sandbox Code Playgroud)