Мне, кажется, нелегко получать мою голову вокруг этого.
Между чем различие calendar.timegm()
и time.mktime()
?
Скажите, что у меня есть a 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
>>>
time.mktime ()
предполагает, что переданный кортеж находится в местном времени, calendar.timegm ()
предполагает, что это в GMT / UTC. В зависимости от интерпретации кортеж представляет разное время, поэтому функции возвращают разные значения (секунды с начала эпохи основаны на UTC).
Разница между значениями должна быть равна смещению часового пояса вашего местного часового пояса.
calendar.timegm
преобразуется из метки времени UTC, time.mktime
преобразуется из местного времени, а не из UTC .
Разница в 8 часов в их результатах точно соответствует часовому поясу вашего местоположения.