2010-04-17 12 views
12

Wenn ich ein UTC Datetime in schwedisches Format umwandle, ist Sommerzeit inbegriffen (CEST). Beim Erstellen einer Datetime mit Sweden als Zeitzone wird jedoch CET anstelle von CEST verwendet. Warum ist das?Python datetime ohne Sommerzeit bei Verwendung von pytz Zeitzone

>>> # Modified for readability 
>>> import pytz 
>>> import datetime 
>>> sweden = pytz.timezone('Europe/Stockholm') 
>>> 
>>> datetime.datetime(2010, 4, 20, 16, 20, tzinfo=pytz.utc).astimezone(sweden) 
datetime(2010, 4, 20, 18, 20, tzinfo=<... 'Europe/Stockholm' CEST+2:00:00 DST>) 
>>> 
>>> datetime.datetime(2010, 4, 20, 18, 20, tzinfo=sweden) 
datetime(2010, 4, 20, 18, 20, tzinfo=<... 'Europe/Stockholm' CET+1:00:00 STD>) 
>>> 

Antwort

11

Das sweden Objekt gibt die MEZ-Zeitzone standardmäßig enthält aber genügend Informationen zu wissen, wann CEST beginnt und zu stoppen. Im ersten Beispiel erstellen Sie ein datetime Objekt und konvertieren es in lokale Zeit. Das Objekt sweden weiß, dass die UTC-Zeit, die Sie überschritten haben, während der Sommerzeit auftritt und entsprechend konvertiert werden kann. Im zweiten Beispiel interpretiert der datetime-Konstruktor Ihre Eingabe immer als Nicht-Sommerzeit und gibt ein entsprechendes Objekt zurück.

Wenn datetime Ihre Eingabe als Wanduhrzeit behandelt und die entsprechende Einstellung für die Sommerzeit gewählt hat, gibt es während der Jahreszeit, in der die Uhren zurückgestellt werden, eine Mehrdeutigkeit. Auf einer Wanduhr tritt die gleiche Stunde zweimal auf. Daher müssen Sie unter datetime angeben, welche Zeitzone Sie beim Erstellen des Objekts datetime verwenden.

+0

danke für die Info! Außerdem kann die Localize-Funktion eines pytz.timezone-Objekts verwendet werden, um die lokalisierte datetime statt datetime zu erstellen (..., tzinfo = ) – Jesper

+4

@Jesper: [pytz docs] (http://pytz.sf.net) sagen Sie explizit, dass Sie .localize() anstelle des datetime -Konstruktors mit dem Parameter tzinfo für die Zeitzone mit DST verwenden. – jfs

0

Zeitzonenabkürzungen sind nicht eindeutig. Zum Beispiel könnte sich "IST" auf "irische Standardzeit", "iranische Standardzeit", "indische Standardzeit" oder "israelische Standardzeit" beziehen. Sie sollten sich nicht auf das Parsen verlassen und stattdessen zoneinfo-Zeitzonen verwenden.

Verwandte Themen