提问人:Vincent Guyader 提问时间:7/26/2023 更新时间:7/27/2023 访问量:47
在 R 中将具有时区偏移量的日期时间字符串转换为本地时间时出现问题
Issue with converting a date-time string with timezone offset to local time in R
问:
在 R 中将时区偏移量的日期时间字符串转换为本地时间时,我遇到了困难。我拥有的日期时间字符串采用以下格式:“2021-01-05T09:00:00+01:00”。我想将其转换为偏移量 (+01:00) 指定的时区的本地时间,该时间对应于冬季(CET - 中欧时间)的巴黎时间(欧洲/巴黎)。
我尝试过使用各种方法,包括润滑剂和作为。POSIXct() 替换为 %z 格式。然而,这些尝试并没有产生正确的结果。例如,使用润滑剂时,输出为“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) 本地时间吗?任何帮助或建议将不胜感激。
谢谢!
答:
2赞
G. Grothendieck
7/26/2023
#1
指定格式(以秒为内)并单独指定时区。不使用任何软件包。
moment <- "2021-01-05T09:00:00+01:00"
as.POSIXct(moment, format = "%Y-%m-%dT%H:%M:%S", tz = "Europe/Paris")
## [1] "2021-01-05 09:00:00 CET"
或
as.POSIXct(moment, format = "%Y-%m-%dT%H:%M:%S", tz = "CET")
## [1] "2021-01-05 09:00:00 CET"
或提取 +01:00 并将其转换为 Etc/GMT-1(注意符号翻转):
as.POSIXct(moment, format = "%Y-%m-%dT%H:%M:%S",
tz = chartr("+-", "-+", sub(".*([+-])0?(.*):..$", "Etc/GMT\\1\\2", moment)))
## [1] "2021-01-05 09:00:00 +01"
评论
0赞
G. Grothendieck
7/26/2023
添加了第三个选项。
评论
lubridate::parse_date_time(moment, "ymd_HMS_z",tz = "Europe/Paris")