¿Cómo encuentro la diferencia entre los tiempos en diferentes zonas horarias en Python?

Estoy tratando de calcular la diferencia (en segundos) entre dos fechas / horas con el siguiente formato:

2010-05-11 17:07:33 UTC

2010-05-11 17:07:33 EDT

time1 = '2010-05-11 17:07:33 UTC' time2 = '2010-05-11 17:07:33 EDT' delta = time.mktime(time.strptime(time1,"%Y-%m-%d %H:%M:%S %Z"))-\ time.mktime(time.strptime(time2, "%Y-%m-%d %H:%M:%S %Z")) 

El problema que tengo es EDT no se reconoce, el error específico es

 ValueError: time data '2010-05-11 17:07:33 EDT' does not match format '%Y-%m-%d %H:%M:%S %Z' 

Echa un vistazo a la biblioteca de definiciones de zona horaria mundial pytz .

Esta biblioteca permite cálculos precisos y multiplataforma de la zona horaria utilizando Python 2.3 o superior. También resuelve el problema de los tiempos ambiguos al final del horario de verano, sobre el que puede obtener más información en la Referencia de la biblioteca de Python (datetime.tzinfo).

Aprovecha la base de datos tz , que debe incluir EDT, y le permite realizar los cálculos que necesita (y probablemente de manera más confiable y precisa que su implementación actual).

Además de pytz , echa un vistazo a python-dateutil . La funcionalidad relativedelta es sobresaliente.

Aquí hay una muestra de cómo usarlos juntos:

 from datetime import datetime from dateutil.relativedelta import * import pytz if __name__ == '__main__': date_one = datetime.now(pytz.timezone('US/Eastern')) date_two = datetime.now(pytz.timezone('US/Mountain')) rdelta = relativedelta(date_one, date_two) print(rdelta) 

De docs para strptime

El soporte para la directiva% Z se basa en los valores contenidos en tzname y si la luz del día es verdadera. Debido a esto, es específico de la plataforma, excepto para reconocer UTC y GMT, que siempre se conocen (y se consideran zonas horarias que no son de horario de verano).