【问题标题】:Convert UNIX epoch to Date object将 UNIX 纪元转换为日期对象
【发布时间】:2012-11-07 12:27:17
【问题描述】:

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

我已阅读 ?Date?as.Date??epoch,但似乎错过了这些信息。

【问题讨论】:

    标签: r time r-faq


    【解决方案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
    • 我明白了。已更正
    猜你喜欢
    • 2016-09-15
    • 2019-08-21
    • 2013-04-02
    • 2013-05-12
    • 2013-01-08
    • 2014-01-25
    • 2018-12-27
    相关资源
    最近更新 更多