将字符转换为 POSIXct 时如何保持时区转换

How can I keep timezone shifts when converting characters to POSIXct

我有一个大型数据框,其中有一列包含日期时间,编码为因子 variable.My Sys.timezone() 是 "Europe/Berlin"。日期时间格式如下:

2015-05-05 17:27:04+05:00

其中 +05:00 代表 GMT 的时移。重要的是,我的数据集中有多个时区,因此我无法设置特定时区并忽略字符串的最后 6 个字符。这是我到目前为止尝试过的:

 # Test Date
 test <- "2015-05-05 17:27:04+05:00"

 # Removing the ":" to make it readable by %z
 A <- paste(substr(test,1,22),substr(test,24,25),sep = "");A

 # Returns
 # "2015-05-05 17:27:04+0500"


 output <- as.POSIXct(as.character(A, "%Y-%B-%D %H:%M:%S%z"))

 # Returns
 # "2015-05-05 17:27:04 CEST"

"CEST" +0500 的输出不正确。此外,当我 运行 整个列上的此代码时,我看到每个日期都编码为 CEST,而不管偏移量如何。

如何在转换为 POSIXct 时保持指定的时区?

为了流程方便可以使用lubridate包。 例如。

library("lubridate")#load the package
ymd_hms("2015-05-05 17:27:04+05:00",tz="GMT")#set the date format
[1] "2015-05-05 12:27:04 GMT"

因此您保留时区信息。最后:

as.POSIXct(ymd_hms("2015-05-05 17:27:04+05:00",tz="GMT"),tz = "GMT")#transform the date into another timezone
[1] "2015-05-05 12:27:04 GMT"