0

生成跨越 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 仅在太平洋标准时间 01:45 之后 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 发生了什么?

顺便说一句,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"

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

顺便说一句,这与是否有办法在 lubridate 中自动分配 DST 转换?.

账单

4

1 回答 1

0

感谢带有 lubridate 的 R 日期序列,我找到了答案:

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

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

于 2014-06-04T18:15:15.743 回答