Zonas horarias con zoneinfo
Trabaje con objetos datetime conscientes de la zona horaria
Zonas horarias con zoneinfo es una lección gratuita de Python Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Python Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Python Academy incluye 4 lecciones en total.
Datetimes naive y aware
Un datetime naive no contiene información de zona horaria: solo indica «las 2 p. m.» sin aclarar de qué zona horaria. Un datetime aware incluye una zona horaria, por lo que identifica un momento exacto en todo el mundo.
Los datetimes aware evitan errores cuando los usuarios se encuentran en varias regiones.
from datetime import datetime
naive = datetime(2026, 5, 30, 14, 0)
print(naive.tzinfo)Importar zoneinfo
Python 3.9 y versiones posteriores incluyen zoneinfo en la biblioteca estándar. Importe ZoneInfo y pase un nombre de zona horaria IANA como 'Europe/Istanbul' o 'America/New_York'.
from zoneinfo import ZoneInfo
tz = ZoneInfo('Europe/Istanbul')
print(tz)Crear un datetime aware
Pase tzinfo=ZoneInfo(...) al construir un datetime para convertirlo en aware. Ahora sabrá exactamente a qué región pertenece.
from datetime import datetime
from zoneinfo import ZoneInfo
d = datetime(2026, 5, 30, 14, 0, tzinfo=ZoneInfo('Europe/Istanbul'))
print(d)
print(d.tzinfo)UTC como referencia
UTC es la referencia universal. Use datetime.now(ZoneInfo('UTC')) para obtener la hora UTC aware actual. Almacenar las horas en UTC es una práctica recomendada.
from datetime import datetime
from zoneinfo import ZoneInfo
utc_now = datetime(2026, 5, 30, 11, 0, tzinfo=ZoneInfo('UTC'))
print(utc_now)Convertir entre zonas
.astimezone(tz) convierte un datetime aware a otra zona horaria y ajusta el reloj para que siga representando el mismo instante.
from datetime import datetime
from zoneinfo import ZoneInfo
utc = datetime(2026, 5, 30, 11, 0, tzinfo=ZoneInfo('UTC'))
ist = utc.astimezone(ZoneInfo('Europe/Istanbul'))
print('UTC:', utc)
print('Istanbul:', ist)Mismo instante, relojes diferentes
Después de la conversión, los valores del reloj muestran números diferentes, pero el instante subyacente es idéntico. Comparar dos datetimes aware compara los momentos reales, no los dígitos mostrados.
from datetime import datetime
from zoneinfo import ZoneInfo
utc = datetime(2026, 5, 30, 11, 0, tzinfo=ZoneInfo('UTC'))
ny = utc.astimezone(ZoneInfo('America/New_York'))
print(utc == ny)Consultar el desplazamiento UTC
El método .utcoffset() devuelve un timedelta que muestra cuánto se desvía la zona de UTC en ese momento, incluido cualquier ajuste por horario de verano.
from datetime import datetime
from zoneinfo import ZoneInfo
d = datetime(2026, 5, 30, 14, 0, tzinfo=ZoneInfo('Europe/Istanbul'))
print('Offset:', d.utcoffset())El horario de verano se gestiona automáticamente
zoneinfo utiliza la base de datos de zonas horarias del sistema, por lo que sabe cuándo comienza y termina el horario de verano. Una misma zona puede tener distintos desplazamientos a lo largo del año.
from datetime import datetime
from zoneinfo import ZoneInfo
winter = datetime(2026, 1, 15, 12, 0, tzinfo=ZoneInfo('America/New_York'))
summer = datetime(2026, 7, 15, 12, 0, tzinfo=ZoneInfo('America/New_York'))
print('Winter:', winter.utcoffset())
print('Summer:', summer.utcoffset())Asignar una zona a una hora naive
Si un datetime naive representa una hora local conocida, asígnele una zona con .replace(tzinfo=...). Esto etiqueta la hora sin modificarla.
from datetime import datetime
from zoneinfo import ZoneInfo
naive = datetime(2026, 5, 30, 9, 0)
aware = naive.replace(tzinfo=ZoneInfo('Europe/Istanbul'))
print(aware)Evitar mezclar naive y aware
No puede restar ni comparar un datetime naive con uno aware: Python genera un TypeError. Mantenga la coherencia de sus datetimes en todo el programa.
from datetime import datetime
from zoneinfo import ZoneInfo
naive = datetime(2026, 5, 30, 9, 0)
aware = datetime(2026, 5, 30, 9, 0, tzinfo=ZoneInfo('UTC'))
try:
print(aware - naive)
except TypeError as e:
print('Error:', e)Dar formato con la zona
El código %Z muestra el nombre de la zona horaria y %z muestra el desplazamiento numérico al dar formato a un datetime aware.
from datetime import datetime
from zoneinfo import ZoneInfo
d = datetime(2026, 5, 30, 14, 0, tzinfo=ZoneInfo('Europe/Istanbul'))
print(d.strftime('%Y-%m-%d %H:%M %Z %z'))Comprobación rápida
¿Cuál es la diferencia clave entre un datetime naive y uno aware?
Repaso: zonas horarias con zoneinfo
Resumen:
- Los datetimes naive no tienen información de zona horaria; los aware incluyen
tzinfo. - Use
ZoneInfo('Region/City')del módulozoneinfo. .astimezone()convierte un datetime aware a otra zona.zoneinfogestiona automáticamente el horario de verano y nunca debe mezclar datetimes naive con datetimes aware.
from datetime import datetime
from zoneinfo import ZoneInfo
utc = datetime(2026, 5, 30, 12, 0, tzinfo=ZoneInfo('UTC'))
print(utc.astimezone(ZoneInfo('Europe/Istanbul')))Preguntas frecuentes
¿La lección «Zonas horarias con zoneinfo» es gratis?
Sí — el texto completo de «Zonas horarias con zoneinfo» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Python Academy, actualiza a CoddyKit PRO. El curso de Python Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Zonas horarias con zoneinfo»?
Trabaje con objetos datetime conscientes de la zona horaria Practicas Python Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Python Academy?
No se requiere experiencia previa. Python Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Zonas horarias con zoneinfo»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Python Academy?
Sí. Cada lección de Python Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- date, time, datetime
- Timedelta y operaciones aritméticas
- Formato y análisis
- Zonas horarias con zoneinfo