Zeitdelta-Differenz mit DST-Stunden ermitteln (Python)

Aug 25 2020

Bei zwei Datumsangaben wie 2020-01-01 00:00:00 und 2020-04-01 00:00:00 möchte ich das Zeitdelta zwischen den beiden Daten in Bezug auf die Anzahl der Stunden mit einer Addition / Subtraktion aufgrund von erhalten Sommerzeit . Ich bin mir nicht sicher, wie ich vorgehen soll.

Antworten

2 MrFuppes Aug 25 2020 at 14:39

Standardmäßig gibt Python's timedeltaIhnen einen Zeitunterschied zwischen Wand und Uhr für bestimmte Datums- / Uhrzeitobjekte (solche, an die eine Zeitzone angehängt ist) - nicht die absolute Zeit (im physischen Sinne; mit der Sekunde als SI-Einheit ).

Um ein "DST-fähiges" Zeitdelta zu erhalten, stellen Sie zunächst sicher, dass die datetime-Objekte in einer bestimmten Zeitzone (mit der DST) lokalisiert sind. Dann berücksichtigen Sie den UTC-Offset der beiden datetime-Objekte. zum Beispiel wie

from datetime import datetime
from dateutil.tz import gettz

t0, t1 = "2020-03-07 00:00:00", "2020-03-09 00:00:00"
# to datetime object
t0, t1 = datetime.fromisoformat(t0), datetime.fromisoformat(t1)
# set appropriate timezone
tzone = gettz("US/Eastern")
t0, t1 = t0.replace(tzinfo=tzone), t1.replace(tzinfo=tzone)
# check if UTC offset changed
utcdelta = t1.utcoffset() - t0.utcoffset()
# now calculate the timedelta
td = t1 - t0 - utcdelta
print(td)
# 1 day, 23:00:00

Für die weitere Lektüre empfehle ich die Semantik der zeitzonenbewussten Datetime Arithmetik- Blogpost von Paul Ganssle.