Temukan perbedaan waktu dengan jam DST (Python)

Aug 25 2020

Diberikan dua waktu seperti 2020-01-01 00:00:00 dan 2020-04-01 00:00:00, saya ingin mendapatkan timedelta antara dua tanggal dalam hal jumlah jam dengan penambahan / pengurangan karena waktu musim panas . Saya tidak yakin bagaimana saya dapat melanjutkan.

Jawaban

2 MrFuppes Aug 25 2020 at 14:39

Secara default, Python timedeltamemberi Anda perbedaan waktu dinding untuk objek tanggal waktu yang diketahui (yang memiliki zona waktu terlampir) - bukan waktu absolut (dalam arti fisik; dengan detik sebagai unit SI ).

Untuk mendapatkan timedelta "DST aware", pertama-tama pastikan objek datetime dilokalkan ke zona waktu tertentu (yang memiliki DST). Kemudian, Anda memperhitungkan offset UTC dari dua objek datetime; misalnya seperti

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

Untuk bacaan lebih lanjut, saya merekomendasikan Semantics of timezone-aware datetime arithmetic blog post oleh Paul Ganssle.