2013-05-29 45 views
2

出於某種原因,as.POSIXct解釋"2013-03-10 02:00:00.000"不同於該格式的其他有效日期時間。奇怪的POSIXct錯誤

> as.POSIXct("2013-03-10 01:00:00.000") #Different time, same date 
[1] "2013-03-10 01:00:00 PST" 

> as.POSIXct("2013-03-11 02:00:00.000") #Same time, different date 
[1] "2013-03-11 02:00:00 PDT" 

> as.POSIXct("2013-03-10 02:00:00.000") 
[1] "2013-03-10 PST" 

我使用的是包RODBC從數據庫中讀取這一點,它會自動日期時間的這一整列轉換爲POSIXct類。這會導致整列丟失時間信息。

+1

夏令時時間偏移? 2013-03-10上午2點不存在於該時區嗎? –

+1

@BenBolker是對的。凌晨2點在當天不存在。 –

+0

當然 - 這將解釋從PST到PDT的轉變。我想在不改變RODBC包的代碼或改變數據庫中的值的情況下,沒有簡單的方法解決這個問題。 –

回答

2

這是一個夏時制問題:顯然2013-03-10上午2點在該時區不存在。儘管如此,對於as.POSIXct並沒有抱怨,這是很有趣的(至少對我來說),但是默默地回覆了一個稍微奇怪的答案。一個問題可能是R一般使用系統庫對一些這方面的東西,所以在底層庫的心血來潮......

從註釋包含有用信息:@JoshUlrich指出,你可以得到在此導入數據前使用Sys.setenv(TZ="GMT"),因爲RODBC使用的是系統級時區,而不是允許您指定它...

+0

...但我在Win32(R-2.15.2)和Ubuntu 64(R-3.0.1)上得到相同的行爲。我發誓這次用於返回'NA'。 –

+0

夏令時是問題,'Sys.setenv(TZ =「GMT」)'是一個簡單的解決方法。 –