我想将纪元时间转换为当地时间。正如你在这里看到的,我有不同的时区,我想获得每一行的当地时间。考虑每个时区,我该如何进行转换?
df <- data.frame(Epoch_Time = c(1460230930,1460231830, 1459929664),
Time_Zone = c("UTC−12:00", "UTC+10:00", "UTC-9:00"))
答案 0 :(得分:1)
您需要将您的纪元时间存储为POSIX,然后您可以更轻松地操作。
library(dplyr)
library(lubridate)
df <- tibble(
time_epoch = as.POSIXct(
c(1460230930,1460231830, 1459929664), tz = "UTC", origin = "1970-01-01"
),
time_zone = c("UTC-12:00", "UTC+10:00", "UTC-09:00")
)
df <- mutate(df,
time_zone = as.numeric(substr(time_zone, 4, 6)),
time_local = as.character(time_epoch + hours(time_zone))
)
df
# # A tibble: 3 x 3
# time_epoch time_zone time_local
# <dttm> <dbl> <chr>
# 1 2016-04-09 21:42:10 -12 2016-04-09 11:42:10
# 2 2016-04-09 21:57:10 10 2016-04-10 09:57:10
# 3 2016-04-06 10:01:04 -9 2016-04-06 03:01:04
注意:
我还没有付出努力来正确地推广转换 来自您的UTC字符串,仅适用于此示例。理想的情况下, 你想要 Olson Names 而不是偏移,你可以得到这些 here
time_local
存储为字符,您不能存储具有多个时区的日期/时间列,它们存储为
单个值,请参阅attributes(df$time_epoch)
attributes(df$time_epoch)
# $class
# [1] "POSIXct" "POSIXt"
#
# $tzone
# [1] "UTC"