2016-07-24 60 views
0

Ich suche nach einer Sequenz von Zeitstempeln, die alle drei Stunden an einem bestimmten Datum beginnen und enden. Die Wege, die ich versucht habe, funktionieren gut, aber alle haben das gleiche Problem. Irgendwo in der Mitte der Sequenz gibt es eine Zeitumwandlung zwischen PST zu PDT und ich bin mir nicht sicher warum. Im Folgenden sind die Codes, die ich versucht habe, ähnlich wie die zuvor auf dieser Seite gestellte Fragen (Question1 und Question2):Reihenfolge der Zeitstempel alle drei Stunden

TIME1 <- as.POSIXct("2000-01-01 02:00:00", tz = "America/Los_Angeles") 
TIME2 <- as.POSIXct("2016-02-29 23:00:00" , tz = "America/Los_Angeles") 
temp <- seq(from = TIME1, to = TIME2, by = "3 hours") 

Als ich am Ausgang des temp aussehen, ist es zunächst gut aussieht, es sei denn, bei der Suche spezifiziertes Intervall unterhalb

temp[720:745] 

[1] "2000-03-30 23:00:00 PST" "2000-03-31 02:00:00 PST" "2000-03-31 05:00:00 PST" "2000-03-31 08:00:00 PST" "2000-03-31 11:00:00 PST" "2000-03-31 14:00:00 PST" 
[7] "2000-03-31 17:00:00 PST" "2000-03-31 20:00:00 PST" "2000-03-31 23:00:00 PST" "2000-04-01 02:00:00 PST" "2000-04-01 05:00:00 PST" "2000-04-01 08:00:00 PST" 
[13] "2000-04-01 11:00:00 PST" "2000-04-01 14:00:00 PST" "2000-04-01 17:00:00 PST" "2000-04-01 20:00:00 PST" "2000-04-01 23:00:00 PST" "2000-04-02 03:00:00 PDT" 
[19] "2000-04-02 06:00:00 PDT" "2000-04-02 09:00:00 PDT" "2000-04-02 12:00:00 PDT" "2000-04-02 15:00:00 PDT" "2000-04-02 18:00:00 PDT" "2000-04-02 21:00:00 PDT" 
[25] "2000-04-03 00:00:00 PDT" "2000-04-03 03:00:00 PDT" 

Hinweis über Leitung [1] des Ausgangs, geht es von „2000-03-30 23.00.00 PST“ auf „2000.03.31 02.00.00 PST“, das ist 3 Stunden, aber auf Linie [13] geht es von "2000-04-01 23:00:00 PST" zu "2000-04-02 03:00:00 PDT". Beachten Sie, dass sich die Zeitzone dort ändert. Dies geschieht während der gesamten Sequenz. Irgendwelche Ideen, wie man ein solches Ergebnis vermeiden kann? Ich glaube, es konvertiert automatisch für mich die Sommerzeit, die ich nicht will. Wenn ich es als LST (lokale Standardzeit) behalten kann, wird das großartig.

UPDATE: Ich habe vor kurzem this suggestion gefunden, wo wir nur in die Zeitzone "UTC" konvertieren, um die Sommerzeit zu vermeiden. Es funktioniert, markiert nur alle Zeitstempel als UTC. Es wäre jedoch schön zu sehen, ob es noch einen Weg gibt, es als LST zu behalten.

+1

Mögliches Duplikat [Umgang mit Daten an den Tagen, als wir zu Sommerzeit und zurück in R-Schalter] (http://stackoverflow.com/questions/13865172/handling-data-on-the- Tage-wann-wir-Wechsel-zu-Sommerzeit-Zeit-und-Back-in-r) – dayne

+1

LST = lokale Standardzeit? –

+0

schauen Sie sich auch die 'dst' und' dhours' Funktionen im 'lubridate' Paket an. Sie sind hier relevant. – shayaa

Antwort

4

Wenn Sie Pacific Standardzeit() als die Zeitzone möchten und nicht zu Pacific Tageslicht wechseln möchten (PDT), warum nicht nur angeben? "America/Los Angeles" bedeutet definitions die Zeitzone, die zu einem bestimmten Zeitpunkt (einschließlich DST-Schalter) in der Tat in Los Angeles ist ...

TIME1 <- as.POSIXct("2000-01-01 02:00:00", tz = "PST") 
TIME2 <- as.POSIXct("2016-02-29 23:00:00" , tz = "PST") 
temp <- seq(from = TIME1, to = TIME2, by = "3 hours") 
temp[720:745] 
[1] "2000-03-30 23:00:00 PST" "2000-03-31 02:00:00 PST" 
[3] "2000-03-31 05:00:00 PST" "2000-03-31 08:00:00 PST" 
[5] "2000-03-31 11:00:00 PST" "2000-03-31 14:00:00 PST" 
[7] "2000-03-31 17:00:00 PST" "2000-03-31 20:00:00 PST" 
[9] "2000-03-31 23:00:00 PST" "2000-04-01 02:00:00 PST" 
[11] "2000-04-01 05:00:00 PST" "2000-04-01 08:00:00 PST" 
[13] "2000-04-01 11:00:00 PST" "2000-04-01 14:00:00 PST" 
[15] "2000-04-01 17:00:00 PST" "2000-04-01 20:00:00 PST" 
[17] "2000-04-01 23:00:00 PST" "2000-04-02 02:00:00 PST" 
[19] "2000-04-02 05:00:00 PST" "2000-04-02 08:00:00 PST" 
[21] "2000-04-02 11:00:00 PST" "2000-04-02 14:00:00 PST" 
[23] "2000-04-02 17:00:00 PST" "2000-04-02 20:00:00 PST" 
[25] "2000-04-02 23:00:00 PST" "2000-04-03 02:00:00 PST" 

Die referenced question, die UTC mit empfehlen, kommentiert, dass Drei-Buchstaben-Zeitzone Codes können mehrdeutig sein (z. B. haben Australien und Nordamerika beide östliche Standardzeit, obwohl this reference vorschlägt, dass der australische als AEST codiert ist). Sie sollten auf jeden Fall darauf achten, Ihre Ergebnisse sorgfältig zu prüfen, wie Zeitzone Codierung auf diese Weise des Seins betriebssystemspezifische ...

+1

'" PST "' ist keine gültige Zeitzone und bedeutet daher nicht "Pacific Standard Time". Es ist eine Abkürzung für Pacific Standard Time, kann aber auch eine Abkürzung für andere Zeitzonen sein. –

+0

OK; schlagen Sie vor, ich lösche diese Antwort? (FWIW, es sieht so aus, als ob 'tz = PST' die gleiche Antwort gibt wie 'tz = GMT-8', also hat vielleicht die OS Zeit/Datum Bibliothek richtig geraten? –

+0

Es sieht nicht aus wie 'tz = "PST" 'gibt die gleiche Antwort wie 'tz =" GMT-8 "'. Das * Format * der gedruckten Antworten ist das gleiche (außer der verkürzten Zeitzone), aber die zugrunde liegenden Werte sind nicht (zB vergleichen Sie die Ergebnisse aus dem Aufruf von 'unclass 'tz =" PST "', die zugrunde liegenden Werte sind alle UTC (zB '.POSIXct (unclass (temp), tz =" UTC ")'). Keine Notwendigkeit, Ihre Antwort zu löschen ... obwohl es gut sein könnte, zu editieren und zu aktualisieren/zu klären, was immer Sie denken, dass es gelöscht werden sollte –

1

Hinweis auf Linie [1] des Ausgangs eine gute Chance hat, es geht von "2000-03-30 23:00:00 PST" bis "2000-03-31 02:00:00 PST", was 3 Stunden ist, aber auf Leitung [13] geht es von "2000-04-01 23:00:00 PST "to" 2000-04-02 03:00:00 PDT ".

Beachten Sie, dass "2000.04.01 23.00.00 PST" auf "2000.04.02 03.00.00 PDT" auch 3 Stunden.

Wenn Sie eine Zeitzone wollen, die kein Tageslicht nicht beobachten spart Zeit, aber ist das gleiche von GMT wie Ihre aktuelle Ortszeit versetzt, dann können Sie den Vorschlag in den Zeitzonennamen versuchen Abschnitt ?timezone:

Die meisten Plattformen unterstützen Zeitzonen der Form 'GMT + n' und 'GMT-n', die mit einem festen Offset von UTC (also ohne DST) ausgehen.

R> TIME1 <- as.POSIXct("2000-01-01 02:00:00", tz = "GMT-8") 
R> TIME2 <- as.POSIXct("2016-02-29 23:00:00", tz = "GMT-8") 
R> temp <- seq(from = TIME1, to = TIME2, by = "3 hours") 
R> temp[720:745] 
[1] "2000-03-30 23:00:00 GMT" "2000-03-31 02:00:00 GMT" 
[3] "2000-03-31 05:00:00 GMT" "2000-03-31 08:00:00 GMT" 
[5] "2000-03-31 11:00:00 GMT" "2000-03-31 14:00:00 GMT" 
[7] "2000-03-31 17:00:00 GMT" "2000-03-31 20:00:00 GMT" 
[9] "2000-03-31 23:00:00 GMT" "2000-04-01 02:00:00 GMT" 
[11] "2000-04-01 05:00:00 GMT" "2000-04-01 08:00:00 GMT" 
[13] "2000-04-01 11:00:00 GMT" "2000-04-01 14:00:00 GMT" 
[15] "2000-04-01 17:00:00 GMT" "2000-04-01 20:00:00 GMT" 
[17] "2000-04-01 23:00:00 GMT" "2000-04-02 02:00:00 GMT" 
[19] "2000-04-02 05:00:00 GMT" "2000-04-02 08:00:00 GMT" 
[21] "2000-04-02 11:00:00 GMT" "2000-04-02 14:00:00 GMT" 
[23] "2000-04-02 17:00:00 GMT" "2000-04-02 20:00:00 GMT" 
[25] "2000-04-02 23:00:00 GMT" "2000-04-03 02:00:00 GMT" 
R> attr(temp, "tzone") 
[1] "GMT-8" 
+0

Ich konnte Ihre Ausgabe replizieren, aber ich habe Warnungen bekommen, dass GMT-8 eine unbekannte Zeitzone ist, aber das könnte ein gutes sein Alternative auch, danke für den Vorschlag – lurodrig