2016-01-26 168 views
1

我碰到了一個問題的時間去約會的轉換:[R日期和時間變換時區

times <- c("1976-05-01 01:00:00", "1977-05-01 01:00:00") 
times2 <- as.POSIXct(strptime(times, format="%Y-%m-%d %H:%M", tz="CET")) 
data.frame(times, times2, as.Date(times2), as.Date(times2, tz="CET")) 

我爬[R什麼(*)是:

1976-05-01 01:00:00 1976-05-01 1976-05-01 
1977-05-01 01:00:00 1977-04-30 1977-05-01 

我知道時區和轉換可能是一個真正的痛苦。在as.Date中很容易忘記tz =「CET」。

有什麼好策略不要錯過這樣的錯誤? (我只是因爲與另一個May數據集合並而得到NAs纔得到它)。

獎金:爲什麼1977年之後默認tz的轉換會發生變化?

(*):sessionInfo()

R version 3.2.2 (2015-08-14) 
Platform: x86_64-w64-mingw32/x64 (64-bit) 
Running under: Windows 7 x64 (build 7601) Service Pack 1 

locale: 
[1] LC_COLLATE=German_Germany.1252 LC_CTYPE=German_Germany.1252 LC_MONETARY=German_Germany.1252 LC_NUMERIC=C     
[5] LC_TIME=German_Germany.1252 

回答

2

格式化之前,首先將通常可以解決這類問題,也可以讓你檢查times2ch是給你的打算是什麼:

times2ch <- format(times2) 
as.Date(times2ch) 
## [1] "1976-05-01" "1977-05-01" 

R News 4/1

1

SO煮尋找一個答案後,我剛開始使用lubridate和force_tz()。

作爲一個獎勵,lubridate的mdy_hms()比基本R strptime和類似的快一個數量級。處理數以百萬計的行時十分有用。