R lubridate 时区无法正确转换为 UTC/祖鲁时间,增加 +1 小时

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

我正在尝试将本地午夜(360 度表示上午 6 点)(我处于中部时间)的分钟转换为 ISO 8601 格式的 UTC/Zulu。然而,结果使转化增加了 1 小时(6 小时而不是 5 小时)。为什么要增加 +1 小时/如何解决此问题?但是,当我使用 Sys.time() 时,它可以正常工作并正确添加 5 小时。

library(lubridate)
minutes_from_midnight <- 360
local_time <- force_tz(as_datetime(minutes_from_midnight*60), tzone = "America/Chicago")
zulu_time <- with_tz(local_time, tzone = "UTC")
iso_time <- format(zulu_time, format="%Y-%m-%dT%H:%M:%SZ")
print(paste("ISO 8601 format for 6 AM local time is", iso_time))

[1]“当地时间上午 6 点的 ISO 8601 格式为 1970-01-01T12:00:00Z”

Sys.timezone()

[1]“美国/芝加哥”

但是,

当我使用系统时间尝试以下操作时,它有效(正确添加+ 5小时):

local_time1 <- Sys.time()
zulu_time1 <- with_tz(local_time1, tzone = "UTC")
iso_time1 <- format(zulu_time1, format="%Y-%m-%dT%H:%M:%SZ")
print(paste("ISO 8601 format for current local time is", iso_time1))

我原本希望增加 +5 小时,但转换后从午夜开始的分钟数增加 +6 小时,但在使用 sys.time() 时则不然。

r datetime timezone lubridate utc
1个回答
0
投票

问题与 Unix Epoch 和时区有关(请参阅 nrennie 的评论)。

这是OP在评论中给出的答案的简化版本:

library(magrittr)

Sys.Date() %>%
  as_datetime() %>%
  {.+ (minutes_from_midnight*60)} %>% 
  force_tz(tzone = "America/Chicago")
© www.soinside.com 2019 - 2024. All rights reserved.