将带有时区偏移的日期时间字符串转换为 R 中的本地时间时出现问题

问题描述 投票:0回答:1

我在将带有时区偏移的日期时间字符串转换为 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)吗?任何帮助或建议将不胜感激。

谢谢!

r lubridate posixct posixlt
1个回答
0
投票

删除最后一个:,然后指定时区进行转换。

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"
© www.soinside.com 2019 - 2024. All rights reserved.