我正在尝试将本地午夜(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() 时则不然。
问题与 Unix Epoch 和时区有关(请参阅 nrennie 的评论)。
这是OP在评论中给出的答案的简化版本:
library(magrittr)
Sys.Date() %>%
as_datetime() %>%
{.+ (minutes_from_midnight*60)} %>%
force_tz(tzone = "America/Chicago")