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

Разница между значениями должна быть равна смещению часового пояса вашего локального часового пояса.