Yo uso esta función datetime_to_local_timezone()
, que parece demasiado complicado, pero no he encontrado ninguna versión más simple de una función que convierte una instancia datetime
a la zona horaria local, como se ha configurado en el sistema operativo , con el desplazamiento de UTC que estaba en vigor en ese momento :
import time, datetime
def datetime_to_local_timezone(dt):
epoch = dt.timestamp() # Get POSIX timestamp of the specified datetime.
st_time = time.localtime(epoch) # Get struct_time for the timestamp. This will be created using the system's locale and it's time zone information.
tz = datetime.timezone(datetime.timedelta(seconds = st_time.tm_gmtoff)) # Create a timezone object with the computed offset in the struct_time.
return dt.astimezone(tz) # Move the datetime instance to the new time zone.
utc = datetime.timezone(datetime.timedelta())
dt1 = datetime.datetime(2009, 7, 10, 18, 44, 59, 193982, utc) # DST was in effect
dt2 = datetime.datetime(2009, 1, 10, 18, 44, 59, 193982, utc) # DST was not in effect
print(dt1)
print(datetime_to_local_timezone(dt1))
print(dt2)
print(datetime_to_local_timezone(dt2))
Este ejemplo imprime cuatro fechas. Por dos momentos en el tiempo, uno en enero y otro en julio de 2009, cada uno, imprime la marca de tiempo una vez en UTC y una vez en la zona horaria local.Aquí, donde CET (UTC + 01: 00) se utiliza en el CET invierno y (GMT + 02: 00) se utiliza en el verano, se imprime el siguiente:
2009-07-10 18:44:59.193982+00:00
2009-07-10 20:44:59.193982+02:00
2009-01-10 18:44:59.193982+00:00
2009-01-10 19:44:59.193982+01:00
local para qué? –
relacionado: [¿Cómo convertir una fecha y hora de python utc a una hora local utilizando solo la biblioteca estándar de Python?] (Http://stackoverflow.com/a/13287083/4279) – jfs