La fecha y hora de Python no incluye el horario de verano cuando se usa la zona horaria de pytz

Si convierto un datetime UTC al formato sueco, se incluye el horario de verano (CEST). Sin embargo, al crear una fecha y hora con Suecia como zona horaria, obtiene CET en lugar de CEST. ¿Por qué es esto?

>>> # 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=) >>> >>> datetime.datetime(2010, 4, 20, 18, 20, tzinfo=sweden) datetime(2010, 4, 20, 18, 20, tzinfo=) >>> 

El objeto de sweden especifica la zona horaria CET de forma predeterminada, pero contiene suficiente información para saber cuándo se inicia y se detiene CEST.

En el primer ejemplo, crea un objeto de datetime y 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 de datetime siempre interpreta su entrada como horario de verano y devuelve un objeto apropiado.

Si datetime considerara su entrada como un reloj de pared y eligiera la configuración de ahorro de luz diurna adecuada para usted, habrá una ambigüedad durante la época del año cuando los relojes se retrasen. 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 .

Las abreviaturas de la 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 Isreali”. No debe confiar en analizar eso, y en su lugar debe usar zonas horarias de información de zona.