2010-05-13 3 views
5

Я пытаюсь вычислить разницу (в секундах) между двумя даты/времени отформатирован следующим образом:Как найти разницу между временем в разных часовых поясах в Python?

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")) 

проблема, которую я получил в EDT не распознается, конкретная ошибка

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

Вы ищете это http://labix.org/python-dateutil? Это может быть проще, чем вы это делаете. –

+0

Спасибо за ответы. Но даже с помощью pytz я до сих пор не мог найти лучшего способа разобрать строку «EDT» и т. Д. И преобразовать ее в объект pytz, часовой пояс может быть любыми аббревиатурами из 3-4 букв, но pytz использует «US/Eastern», , Нужно ли строить картографию для преобразования аббревиатур в формат «США/Восток»? Это звучит слишком много для меня. Спасибо, – JasonA

+1

я в конечном итоге создание текстового файла с записями, как следующие: << EDT \t по восточному поясному времени (Северная Америка) \t UTC-04 >> Тогда поиск записи, используя строку «EDT» полученное из строки времени Используя значение -04 в файле, я могу использовать mktime(), чтобы получить разницу во времени в секундах. Я все еще думаю, что должен быть более простой способ сделать это ... Спасибо, – JasonA

ответ

8

Отъезд pytz мир часовой пояс библиотека определений.

Эта библиотека позволяет выполнять точные и кросс-платформенные вычисления часового пояса с использованием Python 2.3 или выше. Он также решает проблему неоднозначных времен в конце летнего сбережения, о чем вы можете прочитать больше в Справочнике по библиотеке Python (datetime.tzinfo).

Он использует в tz database, который должен включать в себя EDT, и позволяет выполнять расчеты, необходимые (и, вероятно, более надежно & точно, чем текущая реализация).

+1

+1 потому что 'pytz' - это колени пчелы. – jathanism

0

От Docs для strptime

Поддержки директивы% Z основан на значениях, содержащихся в tzname и ли дневной свет верно. Из-за это относится к платформе, за исключением для распознавания UTC и GMT, которые являются всегда известными (и считаются временными интервалами, не учитывающими летнее время).

10

В дополнение к 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) 
+0

Это неверно ... relativedelta не учитывает часовые пояса.Я просто попробовал это, и это дает мне 2-секундную разницу между Лондоном и Парижем (2 сек. = Время, необходимое мне для ввода функции) – dgan

Смежные вопросы