Duplicar posibles:
Weird timezone issue with pytzPYTZ 'América/Edmonton' compensado mal
Esto parece mal:
>>> import pytz
>>> z1 = timezone('America/Edmonton')
>>> z2 = timezone('US/Mountain')
>>> z1
<DstTzInfo 'America/Edmonton' LMT-1 day, 16:26:00 STD>
>>> z2
<DstTzInfo 'US/Mountain' MST-1 day, 17:00:00 STD>
>>> pytz.VERSION
'2012f'
>>>
'América/Edmonton' y 'Estados Unidos/Oriente 'debe ser el mismo huso horario (17:00:00 STD). Sin mencionar 16:26:00 no tiene ningún sentido.
- Actualización -
Lo anterior tiene sentido en el contexto de la respuesta de Jon Skeet. Sin embargo, las cosas se ponen raras cuando hago esto:
>>> d = datetime.now()
>>> d
datetime.datetime(2012, 10, 9, 15, 21, 41, 644706)
Creé una fecha ingenua. Desde 'América/Edmonton' es mi zona horaria, trato de establecer manualmente que:
>>> d2 = d.replace(tzinfo=timezone('America/Edmonton'))
>>> d2
datetime.datetime(2012, 10, 9, 15, 21, 41, 644706, tzinfo=<DstTzInfo 'America/Edmonton' LMT-1 day, 16:26:00 STD>)
Esto no debería haber cambiar nada porque esa es la correcta TZ. Sin embargo:
>>> d2.astimezone(timezone('US/Eastern'))
datetime.datetime(2012, 10, 9, 18, 55, 41, 644706, tzinfo=<DstTzInfo 'US/Eastern' EDT-1 day, 20:00:00 DST>)
Esto debería dame un desplazamiento de 2 horas (diferencia entre 'nosotros/Oriental' y 'América/Edmonton') pero me da 3 horas 26 minutos (que es de 2 horas más uno hora 26 minutos: D)
insertando timezone('US/Mountain')
produce el resultado correcto en astimezone()
. Crear un datetime con "America/Edmonton" también funcionará correctamente.
lo que sucede cuando se construye el 'datetime' con la zona horaria actual para empezar, en lugar de utilizar' replace'? (Parece que esto está básicamente roto ...) –
Entonces funciona bien. Lamentablemente, esa no es una opción en mi caso, ya que el datetime ingenuo es devuelto por otra función que no tengo control :( – Goro