example change biblioteca python datetime timezone

change - strftime python



¿Cómo uso las zonas horarias con un objeto datetime en python? (4)

La biblioteca estándar de Python no contiene información de zona horaria, porque lamentablemente los datos de zona horaria cambian mucho más rápido que Python. Necesitas un módulo de terceros para esto; la elección habitual es pytz

¿Cómo represento correctamente una zona horaria diferente en mi zona horaria? El siguiente ejemplo solo funciona porque sé que EDT está una hora por delante de mí, así que puedo descomentar la resta de myTimeZone ()

import datetime, re from datetime import tzinfo class myTimeZone(tzinfo): """docstring for myTimeZone""" def utfoffset(self, dt): return timedelta(hours=1) def myDateHandler(aDateString): """u''Sat, 6 Sep 2008 21:16:33 EDT''""" _my_date_pattern = re.compile(r''/w+/,/s+(/d+)/s+(/w+)/s+(/d+)/s+(/d+)/:(/d+)/:(/d+)'') day, month, year, hour, minute, second = _my_date_pattern.search(aDateString).groups() month = [ ''JAN'', ''FEB'', ''MAR'', ''APR'', ''MAY'', ''JUN'', ''JUL'', ''AUG'', ''SEP'', ''OCT'', ''NOV'', ''DEC'' ].index(month.upper()) + 1 dt = datetime.datetime( int(year), int(month), int(day), int(hour), int(minute), int(second) ) # dt = dt - datetime.timedelta(hours=1) # dt = dt - dt.tzinfo.utfoffset(myTimeZone()) return (dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second, 0, 0, 0) def main(): print myDateHandler("Sat, 6 Sep 2008 21:16:33 EDT") if __name__ == ''__main__'': main()


Estamos familiarizados con la zona horaria desconectada de GMT (ahora UTC), pero Python toma la zona horaria cortada de Western. Es por eso que hay un corte de zona horaria negativo en Python, creo.


Para la zona horaria local actual, puede usar:

>>> import time >>> offset = time.timezone if (time.localtime().tm_isdst == 0) else time.altzone >>> offset / 60 / 60 * -1 -9

El valor devuelto está en segundos al oeste de UTC (con áreas al este de UTC obteniendo un valor negativo). Esto es lo opuesto a cómo nos gustaría, de ahí el * -1 .

localtime().tm_isdst será cero si los ahorros de luz diurna no están vigentes actualmente (aunque esto puede no ser correcto si un área ha cambiado recientemente su ley de ahorro de luz diurna).


Recomiendo babel y pytz cuando se trabaja con zonas horarias. Mantenga los objetos internos de fecha / hora ingenuos y en UTC y conviértelos a su zona horaria para formatear solamente. La razón por la que probablemente desee objetos ingenuos (objetos sin información de zona horaria) es que muchas bibliotecas y adaptadores de bases de datos no tienen idea de las zonas horarias.