2016-01-26 114 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和类似的快一个数量级。处理数以百万计的行时十分有用。