¿Cómo puedo eliminar una zona horaria de pytz de un objeto datetime?

¿Hay una forma sencilla de eliminar la zona horaria de un objeto datetime de pytz?
por ejemplo, reconstruyendo 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=) 

Para eliminar una zona horaria (tzinfo) de un objeto de fecha y hora:

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

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

 #  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. Por lo tanto, el uso de ORM como sqlalchemy simplemente eliminará la zona horaria cuando le datetime.datetime un objeto datetime.datetime para insertarlo en la base de datos. La solución es convertir su objeto datetime.datetime a UTC (de modo que todo en su base de datos sea UTC, ya que no puede especificar la zona horaria), luego insértelo en la base de datos (donde se elimina la zona horaria) o elimínelo 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 ingenuo de la zona horaria.

 ############################################################################## # 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