在夏季的夏令时

时间:2012-08-27 21:29:12

标签: r time-series

我在OS X Mountain Lion的Mac上运行R 2.15.1。我正在尝试使用lubridate包(v 1.1.0)在2011年美国东部时区以15分钟的间隔生成一系列时间。以下似乎应该有效:

d0 <- mdy_hms("1/1/2011 5:00:00", tz="UTC")
dspan <- d0 + c(0:35039) * minutes(15)
espan <- with_tz(dspan,tz="America/New_york")

现在,2011年夏令时开始于3月13日凌晨2点。该日期espan的前16个值为:

espan[(month(espan)==3)&(day(espan)==13)][1:16]

 [1] "00:00:00 EST" "00:15:00 EST" "00:30:00 EST" "00:45:00 EST"
 [5] "01:00:00 EST" "01:15:00 EST" "01:30:00 EST" "01:45:00 EST"
 [9] "03:00:00 EDT" "03:15:00 EDT" "03:30:00 EDT" "03:45:00 EDT"
[13] "04:00:00 EDT" "04:15:00 EDT" "04:30:00 EDT" "04:45:00 EDT"

在上面的输出中,我删除了日期以使其适合此处。但它给了我我期望的东西。美国东部时间凌晨1点后一小时的时间是美国东部时间凌晨3点但是,夏令时在11月6日结束,以下是该日期espan的前16个值:

espan[(month(espan)==11)&(day(espan)==6)][1:16]

 [1] "00:00:00 EDT" "00:15:00 EDT" "00:30:00 EDT" "00:45:00 EDT"
 [5] "01:00:00 EDT" "01:15:00 EDT" "01:30:00 EDT" "01:45:00 EDT"
 [9] "01:00:00 EDT" "01:15:00 EDT" "01:30:00 EDT" "01:45:00 EDT"
[13] "02:00:00 EST" "02:15:00 EST" "02:30:00 EST" "02:45:00 EST"

为什么1 AM EDT出现两次?不应该比美国东部时间上午1点一小时的时间是东部时间凌晨1点?这是lubridate的问题,还是操作系统的一些怪癖?

1 个答案:

答案 0 :(得分:4)

我认为这是一个错误。

> seq(as.POSIXct("2011-11-06 00:15:00", tz='America/New_York'), 
      as.POSIXct('2011-11-06 02:45:00', tz='America/New_York'), 
      by='min')[c(TRUE, rep(FALSE, 14))]

 [1] "2011-11-06 00:15:00 EDT" "2011-11-06 00:30:00 EDT" "2011-11-06 00:45:00 EDT"
 [4] "2011-11-06 01:00:00 EDT" "2011-11-06 01:15:00 EDT" "2011-11-06 01:30:00 EDT"
 [7] "2011-11-06 01:45:00 EDT" "2011-11-06 01:00:00 EST" "2011-11-06 01:15:00 EST"
[10] "2011-11-06 01:30:00 EST" "2011-11-06 01:45:00 EST" "2011-11-06 02:00:00 EST"
[13] "2011-11-06 02:15:00 EST" "2011-11-06 02:30:00 EST" "2011-11-06 02:45:00 EST"