2017-07-18 125 views
2

我有一个数据帧,其中包含不同时区的日期和时间格式,我想将它与当时的时区进行比较。所以我想在下面的“日期和时间”列中添加1小时,然后将该时间与第一个时间段中的当前时间进行比较(时区为EDT,当前时间为2017-07-18 10:20 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是“美国/纽约”和PDT是太平洋时区。 我只是在原始数据和后来随着城市的名字,我创建了一列知道这是否是“EDT时间或夏令时”不知道如何从这里出发,我想在这个time zone not changing when specified

的东西这是一个与时区真正棘手和我的系统有一个默认的,如果‘美国/纽约’时区,我不知道什么我试过错了,

任何人都可以提出一些想法如何获得当地时间在列?

我的期望的输出是:

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 
+1

我强烈建议'lubridate'这种类型的对话https://cran.r-project.org/web/packages/lubridate/vignettes/lubridate.html –

+4

'lubridate :: with_tz(Sys.time(),“UTC”)''会给当地时间在' UTC' –

+0

@db谢谢,但我不想将时区更改为UTC。 – KKY

回答

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) 

如通过从lubridate建议使用with_tz,然后循环。

+0

谢谢,这确实给出了不同城市的当前时区。对不起,问,但我会在哪里输入我的数据? – KKY

+0

您可以使用'OlsonNames()'来查找匹配的时区。我已经在上面更新了我的答案。 – troh

0

如果你不想/需要使用lubridate,那么这将产生相同的结果,使用tzscurrentTime对象从@ troh的回答是:

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

谢谢你这个伎俩。 – KKY

+0

@thelateemail,这个脚本给了我一些输出,如“1500447303.06667”,它不是时间格式,我试图用'anytime'来完成,但它不工作,试图用'as.character'来改变它的类型给出相同的输出。 – KKY

+0

@kky - 只是再次检查,它没有。它在不同的时区给出一个'POSIXct'的列表,与接受的答案相同。如果你试图“取消列表”,它会回落到自1970-01-01以来的数字表示,这是'POSIXct'的意思。你只能有一个与矢量相关的时区,所以你最好格式化你的时间,比如'sapply(Map(\'attr < - \',currentTime,“tzone”,tzs [dat $ TZ]),格式)' – thelatemail