Python: datetime tzinfo documentación de nombres de zona horaria

Tengo una fecha que construyo:

from datetime import datetime from datetime import tzinfo test = '2013-03-27 23:05' test2 = datetime.strptime(test,'%Y-%m-%d %H:%M') >>> test2 datetime.datetime(2013, 3, 27, 23, 5) >>> test2.replace(tzinfo=EST) Traceback (most recent call last): File "", line 1, in  NameError: name 'EST' is not defined >> test2.replace(tzinfo=UTC) Traceback (most recent call last): File "", line 1, in  NameError: name 'UTC' is not defined 

No puedo encontrar la documentación en la lista de names zona horaria que puedo asignar a tzinfo en la llamada replace.tzinfo= .

He leído lo siguiente y no hay nada:

http://docs.python.org/2/library/datetime.html#tzinfo-objects

También he buscado en google.

Edición : seguí la solución provista por unutbu pero obtengo lo siguiente:

 >>> test = '2013-03-27 00:05' >>> test '2013-03-27 00:05' >>> test2 = dt.datetime.strp(test, '%Y-%m-%d %H:%M') >>> test2 datetime.datetime(2013, 3, 27, 0, 5) >>> est = pytz.timezone('US/Eastern') >>> utc = pytz.utc >>> print(est.localize(test2)) 2013-03-27 00:05:00-04:00 >>> print(utc.localize(test2)) 2013-03-27 00:05:00+00:00 >>> print(est.localize(test2,is_dst=False)) 2013-03-27 00:05:00-04:00 >>> print(est.localize(test2,is_dst=True)) 2013-03-27 00:05:00-04:00 >>> 

Como puede ver, incluso cuando proporciono el indicador is_dst = el desplazamiento sigue siendo ‘-04: 00’, que es EDT y no EST. Aprecio la ayuda. Gracias.

La documentación muestra lo siguiente:

Si insiste en trabajar con horarios locales, esta biblioteca proporciona una facilidad para construirlos sin ambigüedades: http://pytz.sourceforge.net/#problems-with-localtime

 >>> loc_dt = datetime(2002, 10, 27, 1, 30, 00) >>> est_dt = eastern.localize(loc_dt, is_dst=True) >>> edt_dt = eastern.localize(loc_dt, is_dst=False) >>> print(est_dt.strftime(fmt) + ' / ' + edt_dt.strftime(fmt)) 2002-10-27 01:30:00 EDT-0400 / 2002-10-27 01:30:00 EST-0500 

eastern = timezone('US/Eastern') se definió anteriormente en la documentación como eastern = timezone('US/Eastern')

Esto parece indicar que el indicador is_dst= flag debe especificar aún más si se especifica el is_dst= flag o no. Agradecería ayuda sobre por qué esto no funciona en mi caso.

La biblioteca estándar no define zonas horarias, al menos no bien (el ejemplo de juguete que se presenta en la documentación no maneja problemas sutiles como los mencionados aquí ). Para las 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' 

Este es un datetime “ingenuo”:

 test2 = DT.datetime.strptime(test, '%Y-%m-%d %H:%M') print(test2) # 2013-03-27 23:05:00 

Esto hace que la fecha y hora sea compatible con 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 hace que la fecha y hora sea compatible con 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 astimezone la zona horaria a otra zona horaria utilizando el método astimezone :

 test2_eastern = eastern.localize(test2) print(test2_eastern.astimezone(utc)) # 2013-03-28 03:05:00+00:00