Cuando creo un objeto datetime con reconocimiento de zona horaria para 'US/Eastern' y lo imprimo, se muestra como si mi zona horaria fuera -4:56 en lugar de -4:00

>>> obj = datetime.datetime(2020, 7, 1, 9, 30, tzinfo=pytz.timezone('US/Eastern'))
>>> print(obj)
2020-07-01 09:30:00-04:56

En lugar de lo esperado:

2020-07-01 09:30:00-04:00

¿Estoy haciendo algo mal?

1
moshevi 25 jun. 2020 a las 14:56

2 respuestas

La mejor respuesta

En los docs se menciona que la construcción de objetos de fecha y hora no trabaja de esta manera.

Se supone que debes hacer esto:

from datetime import datetime

from pytz import timezone

eastern = timezone('US/Eastern')
obj = eastern.localize(datetime(2020, 7, 1, 9, 30))
>>> obj
datetime.datetime(2020, 7, 1, 9, 30, tzinfo=<DstTzInfo 'US/Eastern' EDT-1 day, 20:00:00 DST>)
>>> print(obj)
2020-07-01 09:30:00-04:00
0
myrmica 25 jun. 2020 a las 12:20

Eche un vistazo a dateutil: puede construir con seguridad la fecha y hora tz-aware objeto utilizando su método originalmente previsto:

import datetime
import dateutil

obj = datetime.datetime(2020, 7, 1, 9, 30, tzinfo=dateutil.tz.gettz('US/Eastern'))
print(obj)
# 2020-07-01 09:30:00-04:00

En Python 3.9, habrá zoneinfo como parte del lib estándar para esa tarea.

1
MrFuppes 25 jun. 2020 a las 14:54