我在将带有时区偏移的日期时间字符串转换为 R 中的本地时间时遇到困难。我的日期时间字符串采用以下格式:“2021-01-05T09:00:00+01:00”。我想将其转换为偏移量 (+01:00) 指定的时区中的当地时间,该时区对应于冬季的巴黎时间(欧洲/巴黎)(CET - 中欧时间)。
我尝试过使用各种方法,包括 lubridate 和 %z 格式的 as.POSIXct() 。然而,这些尝试并没有产生正确的结果。例如,使用 lubridate 时,输出为“2021-01-05 08:00:00 CET”而不是“2021-01-05 09:00:00 CET”。我也尝试使用具有相同格式的 strptime(),但结果仍然不正确。
这是我迄今为止尝试过的 R 代码:
moment <- "2021-01-05T09:00:00+01:00"
date_obj <- ymd_hms(moment) %>% force_tz(tzone = "Europe/Paris")
print(date_obj) # Output: "2021-01-05 08:00:00 CET"
moment <- "2021-01-05T09:00:00+01:00"
date_obj <- ymd_hms(moment) %>% with_tz(tzone = "Europe/Paris")
print(date_obj) # Output: "2021-01-05 09:00:00 CET"
# Using as.POSIXct()
moment <- "2021-01-05T09:00:00+01:00"
date_obj <- as.POSIXct(moment, format = "%Y-%m-%dT%H:%M:%S%z")
print(date_obj) # Output: NA
# Using strptime()
moment <- "2021-01-05T09:00:00+01:00"
date_obj <- strptime(moment, format = "%Y-%m-%dT%H:%M:%S%z")
print(date_obj) # Output: NA
有人可以提供一个清晰准确的解决方案,将此日期时间字符串转换为具有指定时区偏移的巴黎当地时间(CET)吗?任何帮助或建议将不胜感激。
谢谢!
删除最后一个:,然后指定时区进行转换。
moment <- "2021-01-05T09:00:00+01:00"
as.POSIXct(sub("(.*):", "\\1", moment), format = "%Y-%m-%dT%H:%M:%S%z",
tz = "Europe/Paris")
## [1] "2021-01-05 09:00:00 CET"