通过引用转换 UTC 时间戳

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

我正在尝试转换同一数据集中多个机场的时间戳。时间戳以 UTC 格式导入——但我想根据其本地时区显示每个时间戳。我正在使用 lubridate、with_tz 来转换时区,并且我有一个包含所有机场时区的参考数据集。但我似乎无法“参考”时区字段来进行转换。

我收到机场数据的数据集,其中包括 ICAO 机场代码(例如 JFK)和几个时间戳。数据收集在中央服务器(山区标准时间 - MST)上,所有时间戳都反映 MST。这是部分数据集: ID机场时间戳 2342 ATL 2023 年 4 月 27 日下午 1:26:07 2343 洛杉矶国际机场 2023 年 4 月 27 日下午 2:23:31

当我导入时,R 自动转换为 UTC,目前是 MST +6 小时。 这是一个部分数据框: 自由<- data.frame(ID = c(2342, 2343), airport = c(“ATL”, “LAX”), timestamp = c(‘2023-04-27 13:26:07’, ‘2023-04-27 14:23:31)

ID机场时间戳 2342 ATL 2023 年 4 月 27 日下午 7:26:07 2343 洛杉矶国际机场 2023 年 4 月 27 日下午 8:23:31

但我想以当地时间显示这些时间(ATL:EST;LAX:PST)。我从 ICAO 网站下载了一个包含所有机场和时区的文件。

这是 ICAO 的部分表格:

icao <- data.frame(airport = c(‘ATL’, ‘LAX’), time_zone_id = c(‘America/New_York’, ‘America/Los_Angeles’) airport time_zone_id ATL America/New_York LAX America/Los_Angeles

我已经对我的数据集进行了左连接以获取同一数据框中的时间戳:

df1 <- left_join(df, icao, by=c(“airport”) )

ID 机场时间戳 time_zone_id 2342 ATL 4/27/2023 7:26:07 PM 美国/纽约 2343 LAX 4/27/2023 8:23:31 PM America/Los_Angeles

所以现在,我应该能够将时间戳转换为 local_timestamp:

df1 %>% mutate(local_timestamp = with_tz(timestamp, tz = time_zone_id)

相反,我得到一个错误:as.POSIXlt.POSIXct(x, tz) 中的错误:'tz' 值无效

如果我为 EST “硬编码”,我得到了正确的 ATL 时间(4 月比 UTC 早 4 小时),但是,当然,LAX 的错误时间(应该比 UTC 早 7 小时):

df1 %>% mutate(local_timestamp = with_tz(timestame, tz = “America/New_York”)

ID 机场时间戳 time_zone_id local_timestamp 2342 ATL 4/27/2023 7:26:07 PM 美国/纽约 4/27/2023 3:26:07 PM 2343 LAX 4/27/2023 8:23:31 PM America/Los_Angeles 4/27/2023 4:23:31 PM

我搜索了一些解决方案,但结果令人沮丧。我希望有人知道如何“即时”更改时区,或者可以建议另一种方法?

r timezone utc
© www.soinside.com 2019 - 2024. All rights reserved.