Python - calendar.timegm() vs. time.mktime()
Кажется, мне нелегко придумать это.
Какая разница между calendar.timegm()
и time.mktime()
?
Скажите, что у меня есть datetime.datetime
без привязки tzinfo, не должны ли два дать тот же вывод? Разве они не дают количество секунд между эпохой и датой, прошедшей в качестве параметра? А так как прошедшая дата не имеет tzinfo, не так ли это число секунд?
>>> import calendar
>>> import time
>>> import datetime
>>> d = datetime.datetime(2010, 10, 10)
>>> calendar.timegm(d.timetuple())
1286668800
>>> time.mktime(d.timetuple())
1286640000.0
>>>
Ответы
Ответ 1
time.mktime()
предполагает, что переданный кортеж находится в локальное время, calendar.timegm()
принимает его в GMT/UTC. В зависимости от интерпретации кортеж представляет собой другое время, поэтому функции возвращают разные значения (секунды, так как эпоха основана на UTC).
Разница между значениями должна быть равна смещению часового пояса вашего локального часового пояса.
Ответ 2
calendar.timegm
преобразует из временной метки UTC, time.mktime
преобразует с локального времени, а не UTC.
8-часовая разница в их результатах точно соответствует часовому поясу вашего местоположения.