Solución:
La biblioteca estándar no define ninguna zona horaria, al menos no bien (el ejemplo de juguete que se proporciona en la documentación no maneja problemas sutiles como los que se mencionan aquí). Para zonas horarias predefinidas, use el módulo pytz de terceros.
import pytz
import datetime as DT
eastern = pytz.timezone('US/Eastern')
utc = pytz.utc
test="2013-03-27 23:05"
Esta es una fecha y hora “ingenua”:
test2 = DT.datetime.strptime(test, '%Y-%m-%d %H:%M')
print(test2)
# 2013-03-27 23:05:00
Esto crea una fecha y hora consciente de la zona horaria al interpretar test2
como si estuviera en la zona horaria EST:
print(eastern.localize(test2))
# 2013-03-27 23:05:00-04:00
Esto crea una fecha y hora consciente de la zona horaria al interpretar test2
como si estuviera en la zona horaria UTC:
print(utc.localize(test2))
# 2013-03-27 23:05:00+00:00
Alternativamente, puede convertir una fecha y hora con reconocimiento de zona horaria a otra zona horaria utilizando el astimezone
método:
test2_eastern = eastern.localize(test2)
print(test2_eastern.astimezone(utc))
# 2013-03-28 03:05:00+00:00
desde el lanzamiento de Python 3.9, la lib estándar lo hace definir zonas horarias, y puede obtenerlas a través de
import zoneinfo
print(zoneinfo.available_timezones())
# {'America/Belem', 'Asia/Tel_Aviv', 'Australia/North', 'Asia/Omsk',
# 'Europe/Isle_of_Man', 'America/New_York', 'Europe/Nicosia',
# 'Pacific/Funafuti', 'America/Ensenada', 'Europe/Mariehamn',
# 'America/Maceio', 'America/Guatemala', 'America/Guadeloupe', ...
- docs – zoneinfo
- ver también Lista de zonas horarias de la base de datos tz
- … y asegúrese de tener tzdata instalado y actualizado