2012-08-27 36 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)類似的結果,因此它可能不是操作系統特定的,但是指定的是指定的。 –

相關問題