2016-05-05 22 views
5

Ich habe eine Reihe von Datensätzen von einer kontinuierlichen Wasserqualität Überwachung Sonde mit Datum und Uhrzeit in Eastern Standard Time (EST) eingestellt, so dass es keine gibt Korrektur der Sommerzeit (EDT). In R werden die Felder als Faktoren beim Importieren der Datentabelle aus einer MS-Access-Datenbank erkannt, aber beim Konvertieren mithilfe von as.POSIXct() - Daten und -Zeiten ab 02:00 Uhr (24 Uhr) am 13.03.2016 werden NAs. Dies ist aufgrund des Übergangs von EST zu EDT ... daher technisch 2016-03-13 02:00 nicht vorhanden.Umgang mit Eastern Standard Time (EST) und Eastern Daylight Savings (EDT) in R

Einige erstellten Daten als Beispiel

test<-data.frame(Date=rep(as.Date("2016-03-13"),120),Hour=rep(seq(0,23,1),5),Min=rep(seq(0,60,15),24))

Gibt es eine Möglichkeit, den Faktor oder Zeichenfeld als POSIXct Feld zu konvertieren, während die Zeitzone Bezeichnung EST halten? Oder gibt es eine Möglichkeit, das richtige Datum und die richtigen Zeiten in EST und EDT zu finden und umzuwandeln?

Ich bin herum und herum und kann nichts zur Arbeit bekommen. Ich habe versucht, in GMT (oder UTC) zu konvertieren und dann zurück zu EST zu konvertieren (tz = "America/New_York"). Mir ist klar, dass dies ein fortlaufendes Problem ist und Menschen, die mit Datums- und Zeitdaten arbeiten, besonders in R, würden gerne von EDT wegziehen.

Jede Hilfe wird geschätzt ... Ich bin bei meinem Verstand auf diesem einen.

+0

Ich denke, ich hätte eine Arbeit gefunden, aber ich bin mir nicht 100% sicher. Wenn man Datetime von einem Faktor oder Zeichen in ein POSIXct-Feld umwandelt, scheint die Verwendung von tz = "Etc/GMT-5" zu funktionieren ... aber ich bin mir immer noch nicht sicher. Jede Richtung oder Beratung ist willkommen. Beispielcode unten. 'test <-data.frame (Datum = rep (as.Date (" 2016-03-13 "), 96), Stunde = rep (seq (0,23,1), jeweils = 4), min = rep (seq (0,45,15))) ' ' 'as.POSIXct (einfügen (test $ Datum, test $ Stunde, test $ Min), format ="% Y-% m-% d% H% M ", tz =" Etc/GMT-5 ")' –

Antwort

3

Das Problem mit der Verwendung von POSIX tz = "America/New_York" ist, dass die Sommerzeit (UTC-4 oder UTC-5) berücksichtigt wird, auch wenn die zugrunde liegenden Zeitstempel in der US-amerikanischen Eastern Standard Time (UTC-5) gespeichert sind.

Sie sollten in der Lage sein, Ihre tz als Etc/GMT+5 zu bezeichnen. Von dort ist es leicht, zwischen EST, Eastern Local Time und GMT zu konvertieren. Beachten Sie, dass Zeitzonen westlich von UTC in R mit einem positiven Offset gekennzeichnet sind (siehe Dokumentation zu Zeitzonennamen in ?timezone).

Hier einige Beispieldaten (Sommerzeit um 2:00 Uhr Eastern Time auf 3/16/16 in Kraft getretene):

StartTime=as.numeric(as.POSIXct("2016-03-11 0:00:00",format="%Y-%m-%d %H:%M",origin="1970-01-01",tz="Etc/GMT+5")) 
EndTime=as.numeric(as.POSIXct("2016-03-15 0:00:00",format="%Y-%m-%d %H:%M",origin="1970-01-01",tz="Etc/GMT+5")) 

Interval=15*60 #15-min 
data.EST=as.POSIXct(seq(from = StartTime,to = EndTime, by=Interval),origin="1970-01-01",tz="Etc/GMT+5") #generate date stamps 

# convert Eastern Standard Time (in R: GMT+5) to local time (accounts for daylight savings): 
data.EastCoast<- format(data.EST, tz="America/New_York") 

# convert Eastern Standard Time (in R: GMT+5) to UTC/GMT: 
data.UTC<- format(data.EST, tz="GMT") 

compare.times<-data.frame(data.EST,data.EastCoast,data.UTC) 

compare.times[(198:203),] 

       data.EST  data.EastCoast   data.UTC 
198 2016-03-13 01:15:00 2016-03-13 01:15:00 2016-03-13 06:15:00 
199 2016-03-13 01:30:00 2016-03-13 01:30:00 2016-03-13 06:30:00 
200 2016-03-13 01:45:00 2016-03-13 01:45:00 2016-03-13 06:45:00 
201 2016-03-13 02:00:00 2016-03-13 03:00:00 2016-03-13 07:00:00 
202 2016-03-13 02:15:00 2016-03-13 03:15:00 2016-03-13 07:15:00 
203 2016-03-13 02:30:00 2016-03-13 03:30:00 2016-03-13 07:30:00 

Viel Glück!

1

Während der Konvertierung nach POSIX müssen Sie die Zeitzone angeben. Sehen Sie folgendes Beispiel:

test<-data.frame(Date=rep(as.Date("2016-03-13"),96),Hour=rep(seq(0,23,1), each=4),Min=rep(seq(0,45,15))) 
wrong<-as.POSIXct(paste(test$Date, test$Hour, test$Min), format="%Y-%m-%d %H %M") 
ans<-as.POSIXct(paste(test$Date, test$Hour, test$Min), format="%Y-%m-%d %H %M", tz="EST") 

compare<-cbind(test, wrong, ans) 

Im Vektor „falsch“, wurde keine Zeitzone angegeben damit die NA, aber im zweiten Fall Eastern Standard angegeben wurde und das gewünschte Ergebnis erhält.

+0

Danke für die Antwort, ich habe einige widersprüchliche Dokumentation gelesen, um anzuzeigen, dass "EST" in R bezieht sich auf "Australian Eastern Standard Time" und nicht die nordamerikanischen/kanadischen " Eastern Standardzeit ". Dies macht einen großen Unterschied, da "Australische Eastern Standard Time" UTC-10 und "Eastern Standard Time" UTC-5 ist. Ich bin nur total verwirrt in Bezug auf die Zeitzonen-Notation, da es so viele Informationen gibt. Irgendwelche Punkte würden geschätzt werden. –

+0

Siehe Zeitzonen und OlsonNames() für die Liste der möglichen Zeitzonen. Ich bin an der Ostküste und betreibe Sys.time() gibt zurück - "EDT" – Dave2e

+0

Danke, ich laufe auch an der Ostküste der USA und habe Sys.time() und habe EDT bekommen. Danke für die Eingabe Ad-Anleitung. –