2010-04-17 24 views
12

Si convierto un horario de UTC a formato sueco, summertime está incluido (CEST). Sin embargo, al crear una fecha y hora con Suecia como zona horaria, obtiene CET en lugar de CEST. ¿Por qué es esto?Python datetime no incluye horario de verano cuando se usa 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>) 
>>> 

Respuesta

11

El objeto sweden especifica la zona horaria CET por defecto, pero contiene suficiente información para saber cuando se inicia CEST y parada.

En el primer ejemplo, crea un objeto datetime y lo convierte a la hora local. El objeto sweden sabe que la hora UTC que pasó se produce durante el horario de verano y puede convertirla adecuadamente.

En el segundo ejemplo, el constructor datetime siempre interpreta su entrada como no-daylight-savings-time y devuelve un objeto apropiado.

Si datetime ha tratado su entrada como la hora del reloj de pared y eligió la configuración de ahorro de luz adecuada para usted, habría una ambigüedad durante la época del año en que los relojes retroceden. En un reloj de pared, la misma hora ocurre dos veces. Por lo tanto, datetime obliga a especificar qué zona horaria está utilizando cuando crea el objeto datetime.

+0

gracias por la información! Además, la función de localización de un objeto pytz.timezone se puede usar para construir el datetime localizado, en lugar de datetime (..., tzinfo = ) – Jesper

+4

@Jesper: [pytz docs] (http://pytz.sf.net) diga explícitamente usar .localize() en lugar del constructor datetime con el parámetro tzinfo para la zona horaria con horario de verano. – jfs

0

Las abreviaturas de zona horaria no son únicas. Por ejemplo, "IST" podría referirse a "Hora estándar irlandesa", "Hora estándar iraní", "Hora estándar india" o "Hora estándar de Isreal". No debe confiar en analizar eso y, en su lugar, debe usar las zonas horarias zoneinfo.

Cuestiones relacionadas