2009-09-14 6 views
18

Ich lese das nicht so komplett pytz documentation und ich bin fest auf einen Teil davon zu verstehen.pytz: Warum wird Normalize beim Konvertieren zwischen Zeitzonen benötigt?

Auch das Konvertieren zwischen Zeitzonen erfordert besondere Aufmerksamkeit. Dies erfordert auch die Normalize-Methode, 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' 

habe ich versucht, dieses sehr Beispiel ohnenormalize verwenden und es stellte sich heraus, genau das gleiche. Meiner Meinung nach erklärt dieses Beispiel nicht wirklich warum wir müssen normalize bei der Konvertierung zwischen datetime Objekte in verschiedenen Zeitzonen verwenden.

Würde jemand bitte geben Sie mir eine Beispiel (wie die oben), wo das Ergebnis unterscheidet, wenn nicht normalize verwenden.

Dank

+0

siehe [Wird die Normalisierung bei der Konvertierung in lokale Zeitzonen noch benötigt?] (Https://answers.launchpad.net/pytz/+question/249229) – jfs

Antwort

8

Von der pytz Dokumentation:

Darüber hinaus, wenn Sie Datumsberechnungen auf lokalen Zeiten durchführen, die DST Grenzen überschreiten, (dh die Ergebnisse in einer falschen Zeitzone sein kann, subtrahieren 1. Minute. von 2002-10-27 1:00 EST und du bekommst 2002-10-27 0:59 EST anstelle des korrekten 2002-10-27 1:59 EDT). Eine normalize() -Methode wird bereitgestellt, um dies zu korrigieren. Leider können diese Probleme nicht gelöst werden, ohne die Python-Datetime-Implementierung zu ändern.

+2

Dieses Zitat erklärt nicht, warum Sie 'tz.normalize benötigen() 'nach' .astimezone (tz) 'call – jfs

+4

[es wird bestätigt] (https://answers.launchpad.net/pytz/+question/249229): *" Beim Konvertieren zwischen Zeitzonen, '.astimezone()' sollte alles sein, was benötigt wird. "* Dh, Sie brauchen nicht' tz.normalize() 'nach' .astimezone (tz) '. – jfs

6

Die docs sagen, dass normalisieren als Behelfslösung für DST Ausgaben verwendet wird:

Darüber hinaus, wenn Sie Datumsberechnungen auf lokalen Zeiten durchführen, die DST Grenzen überschreiten, die Ergebnisse in einer falschen Zeitzone sein kann (dh subtrahieren Sie 1 Minute vom 27.10.2002 1:00 EST und Sie erhalten 2002-10-27 0:59 EST anstelle des korrekten 2002-10-27 1:59 EDT). Eine normalize() -Methode wird bereitgestellt, um dies zu korrigieren.

So wird es verwendet, um einige Randfälle mit DST zu korrigieren. Wenn Sie keine DST-Zeitzonen (z. B. UTC) verwenden, ist es nicht notwendig, Normalize zu verwenden.

Wenn Sie es nicht verwenden, könnte Ihre Konvertierung unter Umständen eine Stunde frei sein.

+0

Ja, es ist in der Tat ein DST-Problem. –

Verwandte Themen