Я пытаюсь вычислить различие (в секундах) между двумя датами/временами, отформатированными как следующее:
11.05.2010 17:07:33 UTC
11.05.2010 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"))
Проблемой, которую я получил, является EDT, не распознан, определенная ошибка
ValueError: time data '2010-05-11 17:07:33 EDT' does not match format '%Y-%m-%d %H:%M:%S %Z'
Проверьте библиотеку pytz world timezone definitions.
Эта библиотека позволяет точно и кроссплатформенно вычислять часовые пояса, используя Python 2.3 или выше. Она также решает проблему неоднозначного времени в конце перехода на летнее время, о которой вы можете прочитать в справочнике по библиотеке Python (datetime.tzinfo).
Она использует преимущества базы данных tz, которая должна включать EDT, и позволяет выполнять необходимые вычисления (и, вероятно, более надежно и точно, чем ваша текущая реализация).
В дополнение к pytz
, посмотрите python-dateutil
. Функциональность relativedelta
выдающаяся.
Вот пример их совместного использования:
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)
Из документации для strptime
Поддержка директивы% Z основана на значениях, содержащихся в tzname и истинном дневном свете. Из-за этого он зависит от платформы, за исключением распознавания UTC и GMT, которые всегда известны (и считаются часовыми поясами, не переходящими на летнее время) ).