timezones mexico ids iana argentina python timezone pytz

python - mexico - eliminar pytz timezone



timezone ids (1)

¿Hay alguna manera simple de eliminar la zona horaria de un objeto pytz datetime?
por ejemplo, reconstruir dt desde dt_tz en este ejemplo:

>>> import datetime >>> import pytz >>> dt = datetime.datetime.now() >>> dt datetime.datetime(2012, 6, 8, 9, 27, 32, 601000) >>> dt_tz = pytz.utc.localize(dt) >>> dt_tz datetime.datetime(2012, 6, 8, 9, 27, 32, 601000, tzinfo=<UTC>)


Para eliminar una zona horaria (tzinfo) de un objeto datetime:

# dt_tz is a datetime.datetime object dt = dt_tz.replace(tzinfo=None)

Si está utilizando una biblioteca como arrow , puede eliminar la zona horaria simplemente convirtiendo un objeto de flecha en un objeto de fecha y hora, y luego haciendo lo mismo que en el ejemplo anterior.

# <Arrow [2014-10-09T10:56:09.347444-07:00]> arrowObj = arrow.get(''2014-10-09T10:56:09.347444-07:00'') # datetime.datetime(2014, 10, 9, 10, 56, 9, 347444, tzinfo=tzoffset(None, -25200)) tmpDatetime = arrowObj.datetime # datetime.datetime(2014, 10, 9, 10, 56, 9, 347444) tmpDatetime = tmpDatetime.replace(tzinfo=None)

¿Por qué harías esto? Un ejemplo es que mysql no admite zonas horarias con su tipo DATETIME. Entonces, al usar ORM''s como sqlalchemy, simplemente eliminará la zona horaria cuando le dé un objeto datetime.datetime para insertar en la base de datos. La solución es convertir su objeto datetime.datetime a UTC (para que todo en su base de datos sea UTC ya que no puede especificar la zona horaria) y luego insertarlo en la base de datos (donde la zona horaria se elimina de todos modos) o eliminarlo usted mismo. También tenga en cuenta que no puede comparar los objetos datetime.datetime donde uno es consciente de la zona horaria y otro es la zona horaria ingenua.

############################################################################## # MySQL example! where MySQL doesn''t support timezones with its DATETIME type! ############################################################################## arrowObj = arrow.get(''2014-10-09T10:56:09.347444-07:00'') arrowDt = arrowObj.to("utc").datetime # inserts datetime.datetime(2014, 10, 9, 17, 56, 9, 347444, tzinfo=tzutc()) insertIntoMysqlDatabase(arrowDt) # returns datetime.datetime(2014, 10, 9, 17, 56, 9, 347444) dbDatetimeNoTz = getFromMysqlDatabase() # cannot compare timzeone aware and timezone naive dbDatetimeNoTz == arrowDt # False, or TypeError on python versions before 3.3 # compare datetimes that are both aware or both naive work however dbDatetimeNoTz == arrowDt.replace(tzinfo=None) # True