【问题标题】:Generating sequences of dates and times across a DST transition在 DST 转换中生成日期和时间序列
【发布时间】:2014-06-04 18:07:23
【问题描述】:

生成跨越 DST 边界的时间序列的好方法是什么?

例如,

startdst <- ymd_hms("2013-03-10 00:00:00",tz="America/Los_Angeles")
enddst <- ymd_hms("2013-11-03 00:00:00",tz="America/Los_Angeles")

在往返美国西海岸 DST 的过渡日开始时创建时间。

startday <- startdst + minutes(seq(0,to = 24*60, by = 15))
endday <- enddst + minutes(seq(0,to = 24*60, by = 15))

在两天内以 15 分钟的间隔创建瞬间。

这给了我

> head(startday,n=16)
 [1] "2013-03-10 00:00:00 PST" "2013-03-10 00:15:00 PST"
 [3] "2013-03-10 00:30:00 PST" "2013-03-10 00:45:00 PST"
 [5] "2013-03-10 01:00:00 PST" "2013-03-10 01:15:00 PST"
 [7] "2013-03-10 01:30:00 PST" "2013-03-10 01:45:00 PST"
 [9] NA                        NA                       
[11] NA                        NA                       
[13] "2013-03-10 03:00:00 PDT" "2013-03-10 03:15:00 PDT"
[15] "2013-03-10 03:30:00 PDT" "2013-03-10 03:45:00 PDT"

即使 03:00 PDT 仅在 01:45 PST 之后 15 分钟。 IOW,为什么元素 [9] 到 [12] 在那里?

同样,

> head(endday,n=16)
 [1] "2013-11-03 00:00:00 PDT" "2013-11-03 00:15:00 PDT"
 [3] "2013-11-03 00:30:00 PDT" "2013-11-03 00:45:00 PDT"
 [5] "2013-11-03 01:00:00 PDT" "2013-11-03 01:15:00 PDT"
 [7] "2013-11-03 01:30:00 PDT" "2013-11-03 01:45:00 PDT"
 [9] "2013-11-03 02:00:00 PST" "2013-11-03 02:15:00 PST"
[11] "2013-11-03 02:30:00 PST" "2013-11-03 02:45:00 PST"
[13] "2013-11-03 03:00:00 PST" "2013-11-03 03:15:00 PST"
[15] "2013-11-03 03:30:00 PST" "2013-11-03 03:45:00 PST"

直接从太平洋夏令时间 1:45 到太平洋标准时间 2:00,即使这些时间间隔 75 分钟。 IOW,太平洋标准时间 1:00 到 1:45 PST 发生了什么?

顺便说一句,lubridate 知道:

> diff(endday)
Time differences in mins
 [1] 15 15 15 15 15 15 15 75 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15
[26] 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15
[51] 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15
[76] 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15
attr(,"tzone")
[1] "America/Los_Angeles"

如何在连续条目中获得连续瞬间?

顺便说一句,这与Is there a way to assign DST transitions automatically in lubridate? 松散相关。

比尔

【问题讨论】:

    标签: r lubridate


    【解决方案1】:

    感谢R sequence of dates with lubridate,我找到了答案:

    seq(startdst,startdst+hours(4),by="15 min")
    seq(enddst,enddst+hours(4),by="15 min")
    

    不过,我不明白为什么我原来的方法失败了;似乎它应该给出相同的答案或抛出错误。

    【讨论】:

      猜你喜欢
      • 2016-04-05
      • 2018-06-23
      • 1970-01-01
      • 1970-01-01
      • 2016-10-23
      • 2011-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多