将字符转换为 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"
我有一个大型数据框,其中有一列包含日期时间,编码为因子 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"