在 R 中将字符串转换为 POSIX 时,夏令时重叠

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

我有一个我读入的日期时间字符串文件,其中包含添加的信息,无论是否是夏令时,例如格式:

"2024-10-27 02:30:00 CEST"

但是这个时间日期时间值也可以存在为

"2024-10-27 02:30:00 CET"

取决于时间是在时间切换之前还是之后测量的。

如果我有一个像这样的字符串,我想将它解析为 POSIXct 对象,但这样它保留 CEST 或 CET 的信息。如果我将此字符串解析为 POSIXct,结果是

> as.POSIXct("2024-10-27 02:30 CEST", tz="Europe/Berlin")
[1] "2024-10-27 02:30:00 CEST"
> as.POSIXct("2024-10-27 02:30 CET", tz="Europe/Berlin")
[1] "2024-10-27 02:30:00 CEST"

这意味着我丢失了有关 CET 的信息。
是否有可能将字符串解析为 POSIXct 并保留信息,这也适用于不同的时区?

到目前为止我发现的唯一可能性是使用

> as.POSIXct("2024-10-27 02:30 CET", tz="Europe/Berlin")+60*60
[1] "2024-10-27 02:30:00 CET"

将时间再次切换回 CET,但是这个解决方案很难推广到所有时区,因为我必须知道每个时区何时发生切换,以及哪个子字符串(例如 CEST 和 CET)代表之前和之后时间切换,然后决定是否要添加小时。

非常感谢任何帮助。

r time posix posixct posixlt
1个回答
0
投票

我认为这个问题的答案是你不能。这是因为

> "CEST" %in% OlsonNames()
[1] FALSE
> "CET" %in% OlsonNames()
[1] TRUE

要么接受

> d = c("2024-10-27 02:30:00 CET", "2024-10-27 02:30:00 CEST")
> as.POSIXct(d, tz="Europe/Berlin")
[1] "2024-10-27 02:30:00 CEST" "2024-10-27 02:30:00 CEST"

或使用

提取“额外信息”
> data.frame(date = as.POSIXct(d, tz="Europe/Berlin"), 
+            add = gsub("[^[:alpha:]]", "", d))
                 date  add
1 2024-10-27 02:30:00  CET
2 2024-10-27 02:30:00 CEST

正如用户@Wojciech Artichowicz 在评论中提到的。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.