Python: time.mktime возвращает одно и то же значение для разных дат

Я работал над некоторыми сценариями Python, чтобы рассчитать время, прошедшее с более старой даты, и неожиданно получил отрицательный результат. Я понял, что проблема может быть в функции time.mktime. Давайте получим этот код:

import time
import datetime

before = datetime.datetime(2010, 10, 17, 0, 0, 0)
after = datetime.datetime(2010, 10, 17, 1, 0, 0)

print "%s = %f" % (before, time.mktime(before.timetuple()))
print "%s = %f" % (after, time.mktime(after.timetuple()))

На моем 32-битном Linux Python 2.6.4 вывод:

2010-10-17 00:00:00 = 1287284400.000000
2010-10-17 01:00:00 = 1287284400.000000

Одна и та же временная метка для разного времени! Я делаю что-то неправильно?


person Gabriel Magno    schedule 22.03.2011    source источник
comment
Я получаю разные на Python 2.6.5: 2010-10-17 00:00:00 = 1287273600.000000 ~ 2010-10-17 01:00:00 = 1287277200.000000   -  person Mark Nenadov    schedule 22.03.2011
comment
@mark Какая у тебя система? Я попробовал Linux 32 Python 2.6.5 и все равно получил 1287284400.000000 для обеих дат.   -  person Gabriel Magno    schedule 22.03.2011
comment
Я думаю, что ответ Игнасио Васкес-Абрамса - ваше решение.   -  person Mark Nenadov    schedule 22.03.2011


Ответы (2)


Нет. Летнее время в Бразилии начало 17 октября 2010 г., поэтому один час составляет отсутствующий.

person Ignacio Vazquez-Abrams    schedule 22.03.2011

Обратите внимание, что mktime дает представление о вашем местном времени с переходом на летнее время, если это применимо к языковому стандарту вашей системы. Это может привести к странному поведению.

Вы можете предпочесть calendar.timegm, который дает вам время UTC.

person João Neves    schedule 22.03.2011