代码之家  ›  专栏  ›  技术社区  ›  Shane

DST前后的POSIXct时间?

  •  3
  • Shane  · 技术社区  · 15 年前

    我想从POSIX日期中减去1天,然后在DST前后的同一时间结束。

    例如,当我添加一天时:

    > as.POSIXct('2009-03-08 23:00:00.000') + 86400
    [1] "2009-03-09 23:00:00 EDT"
    

    > as.POSIXct('2009-03-08 23:00:00.000') - 86400
    [1] "2009-03-07 22:00:00 EST"
    

    处理DST周围绝对时间差的最佳方法是什么?通常我通过将时间转换成字符串并分别处理它们来处理这个问题,这样就不会应用DST。

    5 回复  |  直到 6 年前
        1
  •  2
  •   hobbs    15 年前

    24小时 . 前24小时(86400秒) 2009-03-08 23:00:00 EDT 2009-03-07 22:00:00 EST day POSIXct 通过 POSIXlt (为了确保2月1日变为1月31日),您应该能够可靠地减去一天。

        2
  •  1
  •   mmmmmm    15 年前

        3
  •  1
  •   Shane    15 年前

    谢谢霍布斯!我需要对它做更多的工作,但是在POSIXlt中,从一天的时间段中减去:

    > a <- as.POSIXct('2009-03-08 23:00:00.000')
    > as.POSIXlt(a)
    [1] "2009-03-08 23:00:00 EDT"
    > a <- as.POSIXlt(a)
    > a$mday <- a$mday -1
    > a
    [1] "2009-03-07 23:00:00 EDT"
    
        4
  •  0
  •   ayman    15 年前

    如果您只想计算天数,可以使用 trunc 只需移动一天:

    > trunc(Sys.time(), "day") + 86400
    [1] "2009-09-13 PDT"
    > trunc(Sys.time(), "day") - 86400
    [1] "2009-09-11 PDT"
    
        5
  •  0
  •   nnn    10 年前

    lubridate 提供两个附加的timespan类,用于指定基本包中有点不清楚的内容。从tha手册:

    持续时间

    周期测量两个瞬间之间发生的时钟时间变化。在闰秒、闰年和DST变化的情况下,周期提供了时钟时间的稳健预测。