2012-08-27 19 views
5

我在Mac OS X Mountain Lion上运行R 2.15.1。我试图用lubridate包(v 1.1.0)在2011年的美国东部时区以15分钟的时间间隔生成一系列时间。下面好像它应该工作:日光节约时间在lubridate

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年夏令时开始在凌晨2点3月13日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日结束,这里是该日的前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的问题,还是操作系统的一些怪癖?

+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" 
+0

谢谢。只是要清楚,它似乎是一个在lubridate中的错误。 – Ringold

+0

它似乎是。但是,时区和夏时制时间问题通常比较棘手,而且与操作系统有关。 – GSee

+0

我在x86_64-pc-mingw32/x64(64位)上获得了与R版本2.15.1(2012-06-22)类似的结果,因此它可能不是操作系统特定的,但是指定的是指定的。 –

相关问题