Mögliche Duplizieren:
Weird timezone issue with pytzpytz 'America/Edmonton' falschen Offset
Dies scheint falsch:
>>> import pytz
>>> z1 = timezone('America/Edmonton')
>>> z2 = timezone('US/Mountain')
>>> z1
<DstTzInfo 'America/Edmonton' LMT-1 day, 16:26:00 STD>
>>> z2
<DstTzInfo 'US/Mountain' MST-1 day, 17:00:00 STD>
>>> pytz.VERSION
'2012f'
>>>
'America/Edmonton' und ‚US/Eastern 'sollte die gleiche Zeitzone sein (17:00:00 STD). Ganz zu schweigen von 16:26:00 macht keinen Sinn.
- Update -
Die oben macht Sinn in Zusammenhang mit Jon Skeet Antwort. Allerdings komisch, wenn ich das mache:
>>> d = datetime.now()
>>> d
datetime.datetime(2012, 10, 9, 15, 21, 41, 644706)
Ich habe ein naives Datum erstellt. Seit ‚America/Edmonton‘ ist meine Zeitzone, versuche ich, dass auch manuell einstellen:
>>> d2 = d.replace(tzinfo=timezone('America/Edmonton'))
>>> d2
datetime.datetime(2012, 10, 9, 15, 21, 41, 644706, tzinfo=<DstTzInfo 'America/Edmonton' LMT-1 day, 16:26:00 STD>)
Dies soll nichts ändern, weil das die richtige TZ ist. Allerdings:
>>> d2.astimezone(timezone('US/Eastern'))
datetime.datetime(2012, 10, 9, 18, 55, 41, 644706, tzinfo=<DstTzInfo 'US/Eastern' EDT-1 day, 20:00:00 DST>)
Das sollte mir einen Versatz von 2 Stunden (Differenz zwischen 'US/Eastern' und 'America/Edmonton'), aber es gibt mir 3 Stunden 26 Minuten (die 2 Stunden Plus ein Stunde 26 Minuten: D)
Das Einfügen timezone('US/Mountain')
ergibt das korrekte Ergebnis in astimezone()
. Das Erstellen einer bewussten Datetime mit 'America/Edmonton' funktioniert ebenfalls korrekt.
Was passiert, wenn Sie die 'datetime' mit der Zeitzone erstellen, anstatt mit' replace' zu beginnen? (Es sieht aus wie das ist im Grunde gebrochen ...) –
Dann funktioniert es gut. Leider ist das in meinem Fall keine Option, da die naive Datetime von einer anderen Funktion zurückgegeben wird, die ich nicht kontrollieren kann :( – Goro