大纪元时间和当地时间,不同的时区

时间:2017-11-06 23:36:33

标签: r date

我想将纪元时间转换为当地时间。正如你在这里看到的,我有不同的时区,我想获得每一行的当地时间。考虑每个时区,我该如何进行转换?

 df <- data.frame(Epoch_Time = c(1460230930,1460231830, 1459929664),
              Time_Zone = c("UTC−12:00", "UTC+10:00", "UTC-9:00"))

1 个答案:

答案 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

注意:

  1. 我还没有付出努力来正确地推广转换 来自您的UTC字符串,仅适用于此示例。理想的情况下, 你想要 Olson Names 而不是偏移,你可以得到这些 here

  2. time_local存储为字符,您不能存储具有多个时区的日期/时间列,它们存储为 单个值,请参阅attributes(df$time_epoch)

    attributes(df$time_epoch)
    # $class
    # [1] "POSIXct" "POSIXt" 
    #
    # $tzone
    # [1] "UTC"