Trova la differenza tra timedelta e l'ora legale (Python)

Aug 25 2020

Dati due datetimes come 2020-01-01 00:00:00 e 2020-04-01 00:00:00, desidero ottenere il timedelta tra le due date in termini di numero di ore con qualsiasi addizione / sottrazione dovuta a ora legale . Non sono sicuro di come procedere.

Risposte

2 MrFuppes Aug 25 2020 at 14:39

Per impostazione predefinita, Python timedeltati dà la differenza di wall-time per oggetti datetime consapevoli (quelli a cui è associato un fuso orario) - non il tempo assoluto (in senso fisico; con il secondo come unità SI ).

Per ottenere un intervallo temporale "che riconosce l'ora legale", assicurati innanzitutto che gli oggetti datetime siano localizzati in un determinato fuso orario (che ha l'ora legale). Quindi, si tiene conto dell'offset UTC dei due oggetti datetime; per esempio come

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

Per ulteriori letture, consiglio il post sul blog di Semantics of timezone-aware datetime aritmetica di Paul Ganssle.