从保存为字符的日期时间转换为 R 中的 POSIXct 时如何自动识别时区?
How to automatically recognise timezone when converting from a datetime saved as character to POSIXct in R?
我正在尝试将 POSIXct 日期时间保存为带时区的字符串,然后将其转换回具有正确时区的原始 POSIXct 日期时间。在反向转换中,我希望从字符串中识别时区,而不必手动指定它。
看起来很简单,但我还没有找到一种方法来做到这一点:我似乎必须手动指定时区(参见下面的顶部示例)或反向转换失败(参见底部示例) .
非常感谢任何建议。
# This works, but I'm manually specifying the timezone on the third line. I want to do this automatically.
dt = as.POSIXct('2021-01-01 00:00:00', tz = 'Pacific/Auckland') #"2021-01-01 NZDT"
char = format(dt, '%Y%m%dT%H%M%OS%z') #20210101T000000+1300 (+1300 = NZDT)
as.POSIXct(char, format = '%Y%m%dT%H%M%OS', tz = 'Pacific/Auckland') #2021-01-01 NZDT. Note manually specifying timezone, which I dont want to do.
# Now trying to automatically specify timezone via '%Z' on the third line. This returns NA.
dt = as.POSIXct('2021-01-01 00:00:00', tz = 'Pacific/Auckland')
char = format(dt, '%Y%m%dT%H%M%OS%z') #"20210101T000000+1300"
as.POSIXct(char, format = '%Y%m%dT%H%M%OS%z') #NA. Note I'm trying to automatically specify timezone via '%Z'
如果您将原始时区强制输入 char
字符串会怎样?例如:
dt <- as.POSIXct('2021-01-01 00:00:00', tz = 'Pacific/Auckland')
dt
#[1] "2021-01-01 NZDT"
char <- format(dt, paste("%Y%m%dT%H%M%OS", attr(dt, "tzone")) )
char
#[1] "20210101T000000 Pacific/Auckland"
然后你可以通过在第一个 space:
处分开来提取日期时间部分和时区部分来取回它
as.POSIXct(
sub("\s.+$", "", char),
format = "%Y%m%dT%H%M%OS",
tz = sub("^.+\s", "", char[1])
)
#[1] "2021-01-01 NZDT"
我正在尝试将 POSIXct 日期时间保存为带时区的字符串,然后将其转换回具有正确时区的原始 POSIXct 日期时间。在反向转换中,我希望从字符串中识别时区,而不必手动指定它。
看起来很简单,但我还没有找到一种方法来做到这一点:我似乎必须手动指定时区(参见下面的顶部示例)或反向转换失败(参见底部示例) .
非常感谢任何建议。
# This works, but I'm manually specifying the timezone on the third line. I want to do this automatically.
dt = as.POSIXct('2021-01-01 00:00:00', tz = 'Pacific/Auckland') #"2021-01-01 NZDT"
char = format(dt, '%Y%m%dT%H%M%OS%z') #20210101T000000+1300 (+1300 = NZDT)
as.POSIXct(char, format = '%Y%m%dT%H%M%OS', tz = 'Pacific/Auckland') #2021-01-01 NZDT. Note manually specifying timezone, which I dont want to do.
# Now trying to automatically specify timezone via '%Z' on the third line. This returns NA.
dt = as.POSIXct('2021-01-01 00:00:00', tz = 'Pacific/Auckland')
char = format(dt, '%Y%m%dT%H%M%OS%z') #"20210101T000000+1300"
as.POSIXct(char, format = '%Y%m%dT%H%M%OS%z') #NA. Note I'm trying to automatically specify timezone via '%Z'
如果您将原始时区强制输入 char
字符串会怎样?例如:
dt <- as.POSIXct('2021-01-01 00:00:00', tz = 'Pacific/Auckland')
dt
#[1] "2021-01-01 NZDT"
char <- format(dt, paste("%Y%m%dT%H%M%OS", attr(dt, "tzone")) )
char
#[1] "20210101T000000 Pacific/Auckland"
然后你可以通过在第一个 space:
处分开来提取日期时间部分和时区部分来取回它as.POSIXct(
sub("\s.+$", "", char),
format = "%Y%m%dT%H%M%OS",
tz = sub("^.+\s", "", char[1])
)
#[1] "2021-01-01 NZDT"