Как найти разницу между временами в разных часовых поясах в Python? - PullRequest
5 голосов
/ 13 мая 2010

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

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'

Ответы [ 3 ]

8 голосов
/ 13 мая 2010

В дополнение к 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)
8 голосов
/ 13 мая 2010

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

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

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

0 голосов
/ 13 мая 2010

Из документов за Время выполнения

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...