2017-07-18 120 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