2010-04-17 6 views
12

Si je convertis un format UTC datetime en format suédois, l'heure d'été est incluse (CEST). Cependant, en créant un datetime avec sweden comme fuseau horaire, il obtient CET au lieu de CEST. Pourquoi est-ce?Python datetime n'incluant pas l'heure d'été lors de l'utilisation de pytz timezone

>>> # 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>) 
>>> 

Répondre

11

L'objet sweden spécifie le fuseau horaire CET par défaut, mais contient suffisamment d'informations pour savoir quand CEST démarre et arrêter.

Dans le premier exemple, vous créez un objet datetime et le convertissez en heure locale. L'objet sweden sait que l'heure UTC que vous avez passée se produit pendant l'heure d'été et peut être convertie de manière appropriée.

Dans le deuxième exemple, le constructeur datetime interprète toujours votre entrée comme étant non-daylight-savings-time et renvoie un objet approprié. Si datetime a traité votre entrée comme l'horloge murale et choisi le paramètre d'heure d'été approprié pour vous, il y aurait une ambiguïté pendant la période de l'année où les horloges sont en retrait. Sur une horloge murale, la même heure apparaît deux fois. Par conséquent, datetime vous oblige à spécifier le fuseau horaire que vous utilisez lorsque vous créez l'objet datetime.

+0

merci pour l'info! De plus, la fonction localize d'un objet pytz.timezone peut être utilisée pour construire le datetime localisé, au lieu de datetime (..., tzinfo = ) – Jesper

+4

@Jesper: [pytz docs] (http://pytz.sf.net) indique explicitement d'utiliser .localize() au lieu du constructeur datetime avec le paramètre tzinfo pour le fuseau horaire avec DST. – jfs

0

Les abréviations de fuseau horaire ne sont pas uniques. Par exemple, «IST» peut se référer à «Irish Standard Time», «Iran Standard Time», «Indian Standard Time» ou «Isreali Standard Time». Vous ne devriez pas compter sur cela, et vous devriez plutôt utiliser les fuseaux horaires de zoneinfo.