Frage

Ich mag 1 Tag ab einem POSIX Datum abzuziehen und zugleich um DST landen.

Zum Beispiel, wenn ich hinzufügen, einen Tag:

> as.POSIXct('2009-03-08 23:00:00.000') + 86400
[1] "2009-03-09 23:00:00 EDT"

Aber wenn ich vorbei gehen, es ausgleicht:

> as.POSIXct('2009-03-08 23:00:00.000') - 86400
[1] "2009-03-07 22:00:00 EST"

Was ist der beste Weg, um mit absoluten Zeitdifferenzen um DST umgehen? Normalerweise ich damit umgehen, indem die Zeiten in Strings konvertieren und den Umgang mit ihnen getrennt, so dass DST nicht angewandt wird.

War es hilfreich?

Lösung

Ihr Code tut genau das, was Sie es gefragt zu tun, weil Sie es nicht bitten, einen Tag zu addieren oder subtrahieren, fragte man es zu addieren oder subtrahieren 24 Stunden . 24 Stunden (86.400 Sekunden) vor 2009-03-08 23:00:00 EDT ist 2009-03-07 22:00:00 EST. Ich bin mit den R-Bibliotheken nicht vertraut, aber ich bin vertraut mit den POSIX-Funktionen, dass sie wickeln. Wenn Sie eine POSIXct nehmen, verringern seine day Eigenschaft um 1, und dann „re-cast“ es POSIXct über POSIXlt (um sicherzustellen, dass zB Februar -1st 31. Januar wird), dann sollten Sie in der Lage sein, 1 Tag zuverlässig zu subtrahieren.

Andere Tipps

Shop Datetimes als UTC - oder in diesem Fall Konvertit UTC einen Tag und konvertieren zurück in der lokalen Zeit subtrahieren. (Diese ignoriert Sekunden springen)

Danke hobbs! Ich brauche ein wenig mehr Arbeit damit zu tun, aber ab dem Tag Schlitz Subtrahieren arbeitet in POSIXlt:

> a <- as.POSIXct('2009-03-08 23:00:00.000')
> as.POSIXlt(a)
[1] "2009-03-08 23:00:00 EDT"
> a <- as.POSIXlt(a)
> a$mday <- a$mday -1
> a
[1] "2009-03-07 23:00:00 EDT"

Wenn Sie nur die Tage zählen möchten, können Sie trunc verwenden, um nur den Tag verschieben:

> trunc(Sys.time(), "day") + 86400
[1] "2009-09-13 PDT"
> trunc(Sys.time(), "day") - 86400
[1] "2009-09-11 PDT"

Das Paket lubridate bietet zwei zusätzliche Klassen, die den Zeitraum angeben, was im Basispaket etwas unklar ist. Von tha Handbuch:

Dauern

Dauern die genaue Höhe der Zeit messen, die zwischen zwei Zeitpunkten auftritt. Dies kann in Bezug auf Taktzeiten unerwartete Ergebnisse erzeugen, wenn eine Schaltsekunde, Schaltjahr, oder eine Änderung der Sommerzeit (DST) tritt in dem Intervall.

Perioden

Perioden messen die Veränderung der Taktzeit, die zwischen zwei Zeitpunkten auftritt. Perioden bieten robuste Vorhersagen der Taktzeit in Gegenwart von Schaltsekunden, Schaltjahren, und Änderungen in DST.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top