获取特定时区的当前时间

时间:2017-07-18 14:29:00

标签: r datetime timezone

我有一个数据框,其中包含不同时区的日期和时间格式,我想将其与该时区的当前时间进行比较。所以我想在下面的“日期和时间”栏中添加1小时,然后将其与该时区的当前时间进行比较,就像第一个时区一样(时区为EDT,当前时间为2017-07-18 10:20 in EDT)

     Date and time   TZ
   2017-07-08 16:00  EDT

   2017-07-17 15:30  PDT

   2017-07-17 11:00  EDT

   2017-07-17 20:00  EDT

   2017-07-17 10:00  EDT

   2017-07-13 15:00  PDT

其中EDT是“America / New_York”,PDT是太平洋时区。 我只是在原始数据中有时间,后来在城市名称中我创建了一个列,知道它是“EDT OR PDT”还不确定如何从这里开始,我尝试了这个time zone not changing when specified

使用时区真的很棘手,如果“America / New_York”时区我的系统有默认设置,我不确定我尝试的是否错误。

任何人都可以知道如何在列中获取当地时间吗?

我想要的输出是:

    Date and time  |  TZ | Localtime(current)

  2017-07-08 16:00 | EDT | 2017-07-17  2017-07-18 10:24:19 EDT

  2017-07-17 15:30 | PDT | 2017-07-17  2017-07-18 09:25:19 PDT

  2017-07-17 11:00 | CDT | 2017-07-17  2017-07-18 09:25:19 CDT

  2017-07-17 20:00 | EDT | 2017-07-17  2017-07-18 23:02:19 EDT

  2017-07-17 10:00 | EDT | 2017-07-17  2017-07-18 10:24:19 EDT

  2017-07-13 15:00 | PDT | 2017-07-17  2017-07-18 09:25:19 PDT

2 个答案:

答案 0 :(得分:1)

library(lubridate)
currentTime <- Sys.time()
tzs <- c("America/Los_Angeles", "America/Chicago", "America/New_York")
names(tzs) <- c("PDT", "CDT", "EDT")
lapply(tzs[data$TZ], with_tz, time = currentTime)

建议使用with_tz中的lubridate,然后循环播放。

答案 1 :(得分:0)

如果您不想/需要使用lubridate,那么使用来自@ troh的答案的tzscurrentTime个对象会产生相同的结果:

Map(`attr<-`, currentTime, "tzone", tzs[dat$TZ])