【问题标题】:Parsing a Millisecond Timestamp To a Time In R将毫秒时间戳解析为 R 中的时间
【发布时间】:2013-08-25 21:55:34
【问题描述】:

我以前有人问过这个问题,但我找不到确切的答案。 如果我有一个代表自午夜以来毫秒数的数字,例如 34200577,我如何将其转换为 R 时间?

【问题讨论】:

    标签: r datetime time-series


    【解决方案1】:

    在午夜构造一个“基线时间”,添加给定的毫秒一次转换为秒并解释为时间:

    R> as.POSIXct(as.numeric(ISOdatetime(2013,8,22,0,0,0)) + 34200577/1e3, 
    +             origin="1970-01-01")
    [1] "2013-08-22 09:30:00.576 CDT"
    R> 
    

    其实更短

    R> ISOdatetime(2013,8,22,0,0,0) + 34200577/1e3
    [1] "2013-08-22 09:30:00.576 CDT"
    R>
    

    ISOdatetime() 一样工作,返回一个适当的时间对象它以小数秒为单位,所以我们只需应用给定的偏移量。

    这似乎是正确的

    R> 34200577/1e3       # seconds
    [1] 34200.6
    R> 34200577/1e3/60    # minutes
    [1] 570.01
    R> 34200577/1e3/60/60 # hours
    [1] 9.50016
    R> 
    

    【讨论】:

    • 很高兴。请随时接受和/或按网站常见的方式投票。
    【解决方案2】:

    POSIXct 使用 1970 作为其时间刻度的原点(以秒为单位。)

    > time= as.POSIXct(34200577/1000 , origin=Sys.Date() )
    > time
    [1] "2013-08-22 02:30:00 PDT"
    

    请注意 Dirk 的方法和我的方法之间的结果差异。输入的 POSIX 时间假设发生在 UCT 中,因此我在 UCT-8 中的位置出现了额外的 8 小时。

    > difftime( as.POSIXct(34200577/1000 , origin=Sys.Date() ) , Sys.Date() )
    Time difference of 9.50016 hours
    

    您可以通过以下方式获取自午夜以来的时间:

     format( as.POSIXct(34200577/1000 , origin=Sys.Date(), tz="UCT" ),
              format="%H:%M:%S")
     [1] "09:30:00"
    

    【讨论】:

    • David,OP 说 自午夜以来的毫秒数,因此您错过了 10^-3 的比例因子。
    • 我们的回答之间有 7 小时的差异。只有一个是对的。我担心您在某处错过了TZ 转换。
    • 对。我留下了差异以突出 OP 的问题。
    【解决方案3】:

    我认为值得指出的一点“问题”......

    在 Windows 64 位的 R 3.1.2 中,我得到了 Dirk 示例的以下结果

    > ISOdatetime(2013,8,22,0,0,0) + 34200577/1e3
    [1] "2013-08-22 09:30:00 BST"
    

    请注意缺少小数秒。这是由于“digits.secs”的选项设置

    > getOption("digits.secs")
    NULL
    

    如下设置此选项会产生预期的结果:

    > options(digits.secs=3)
    > ISOdatetime(2013,8,22,0,0,0) + 34200577/1e3
    [1] "2013-08-22 09:30:00.576 BST"
    

    正如您可能猜到的,这与输出的格式有关,而不是我们从日期算术中得到的实际值。有关这方面的文档,请参阅 ?strptime?options

    【讨论】:

      猜你喜欢
      • 2019-08-01
      • 2016-03-04
      • 1970-01-01
      • 1970-01-01
      • 2016-03-04
      • 2013-03-09
      • 1970-01-01
      相关资源
      最近更新 更多