2015-05-21 3 views
-1

У меня есть 2 даты-времени объектов с 2-х различных часовых поясов:pytz разница в 2 datetimes в секундах? (различные часовые пояса)

datetime1 = 18:26:23, с tzinfo = UTC

datetime2 = 14:30:00, с tzinfo = US/Восточный

Обе даты в тот же день.

Должно быть ровно 1 час, 3 минуты и 37 секунд разница между 2 датами, которая составляет: 3817 секунд общей разницы.

Однако, когда я использую следующий код для сравнения:

time_diff = (datetime2 - datetime1).total_seconds() 

time_diff дает мне значение: 3576.

Я делаю разницу в секундах неправильными? Или я неправильно использую pytz для часовых поясов?

Большое спасибо.

+0

Можете ли вы р это в виде короткой, но полной программы? –

+0

Каковы даты на эти даты и как вы проникли в часовой пояс? Начиная с 'US/Eastern' без даты, вы получаете _original_ версию этого часового пояса (который был 19:04:00 GMT, а не ровный час), а не _current_ версии. Если вы затем упакуете дату в уже установленное время коррекции, вы держите неправильное смещение. – abarnert

ответ

1

Существует два возможных сценария.

  1. Либо вы создаете часовой пояс на вашем DateTime объекты неправильно
  2. Зонное является правильным, но ваши объекты DateTime не фактически представляющие время вы говорите, что они есть.

Например, независимо от часового пояса, я не вижу, как разница между 18:26:23 и 14:30:00 мог дать вам еще несколько секунд, что делает сценарий # 2 более вероятным.

Вы можете распечатать стоимость datetime объектов непосредственно перед запуском линии:

time_diff = (datetime2 - datetime1).total_seconds() 

Вот некоторые примеры кода для справки, что дает ожидаемые секунды:

from pytz import timezone 
from datetime import datetime 

eastern = timezone('US/Eastern') 
utc = timezone('UTC') 
datetime1 = utc.localize(datetime(2002, 10, 27, 18, 26, 23)) 
datetime2 = eastern.localize(datetime(2002, 10, 27, 14, 30, 00)) 
time_diff = (datetime2 - datetime1).total_seconds() 
print(time_diff) # prints 3817 
+0

Это не отвечает на его проблему, потому что его проблема почти наверняка заключается в том, что он создал объекты datetime неправильно и просто показывает, что совершенно разные работы с кодом не очень помогают. – abarnert

+0

И я могу так же легко представить пример, что _doesn't_ работать. Попробуйте то же самое с временной шкалой времени DST 2002-07-27, или время до того, как EST изменилось как 1890-10-27. – abarnert

+0

хорошие моменты, я подозреваю, что временные интервалы не являются проблемой, а его объекты 'datetime' не представляют времени, которое, по его мнению, он делает. –