PYTZ: Warum wird normalisiert, wenn Sie zwischen Zeitzonen konvertieren?
Frage
Ich lese das nicht so vollständig Pytz -Dokumentation Und ich stecke fest, einen Teil davon zu verstehen.
Die Konvertierung zwischen Zeitzonen erfordert auch besondere Aufmerksamkeit. Dies muss auch die Normalisierungsmethode verwenden, um sicherzustellen, dass die Konvertierung korrekt ist.
>>> utc_dt = utc.localize(datetime.utcfromtimestamp(1143408899))
>>> utc_dt.strftime(fmt)
'2006-03-26 21:34:59 UTC+0000'
>>> au_tz = timezone('Australia/Sydney')
>>> au_dt = au_tz.normalize(utc_dt.astimezone(au_tz))
>>> au_dt.strftime(fmt)
'2006-03-27 08:34:59 EST+1100'
>>> utc_dt2 = utc.normalize(au_dt.astimezone(utc))
>>> utc_dt2.strftime(fmt)
'2006-03-26 21:34:59 UTC+0000'
Ich habe dieses Beispiel versucht ohne Verwendung normalize
Und es stellte sich genauso heraus. Meiner Meinung nach erklärt sich dieses Beispiel nicht wirklich warum Wir müssen verwenden normalize
Beim Konvertieren zwischen datetime
Objekte in verschiedenen Zeitzonen.
Würde mir jemand bitte eine geben Beispiel (wie das oben genannte), bei dem das Ergebnis unterscheidet, wenn sie nicht verwendet werden normalize
.
Vielen Dank
Lösung
Aus der PYTZ -Dokumentation:
Wenn Sie die Datum Arithmetik in lokalen Zeiten durchführen, die DST-Grenzen überschreiten, können die Ergebnisse möglicherweise in einer falschen Zeitzone liegen (dh 1 Minute von 2002-10-27 1:00 EST und Sie erhalten 2002-10-27 0: 59 EST anstelle der richtigen 2002-10-27 1:59 EDT). Eine Normalize () -Methode wird bereitgestellt, um dies zu korrigieren. Leider können diese Probleme nicht behoben werden, ohne die Python DateTime -Implementierung zu ändern.
Andere Tipps
Die Dokumente sagen, dass Normalisierung als Problemumgehung für DST -Probleme verwendet wird:
Wenn Sie die Datum Arithmetik in lokalen Zeiten durchführen, die DST-Grenzen überschreiten, können die Ergebnisse möglicherweise in einer falschen Zeitzone liegen (dh 1 Minute von 2002-10-27 1:00 EST und Sie erhalten 2002-10-27 0: 59 EST anstelle der richtigen 2002-10-27 1:59 EDT). Eine Normalize () -Methode wird bereitgestellt, um dies zu korrigieren.
Es wird also verwendet, um einige Kantenfälle mit DST zu korrigieren. Wenn Sie keine DST -TimeZones (z. B. UTC) verwenden, ist es nicht erforderlich, Normalisierung zu verwenden.
Wenn Sie es nicht verwenden, kann Ihre Konvertierung möglicherweise unter bestimmten Umständen eine Stunde frei sein.