Python - calendar.timegm () против time.mktime () - PullRequest
57 голосов
/ 02 июня 2010

Мне, кажется, трудно обдумать это.

В чем разница между 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
>>> 

Ответы [ 2 ]

96 голосов
/ 02 июня 2010

time.mktime() предполагает, что переданный кортеж находится по местному времени, calendar.timegm() предполагает, что это GMT / UTC. В зависимости от интерпретации кортеж представляет различное время, поэтому функции возвращают разные значения (секунды, начиная с эпохи, основанной на UTC).

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

9 голосов
/ 02 июня 2010

calendar.timegm конвертируется из метки времени UTC, time.mktime конвертируется из местного время не UTC .

Разница в результатах за 8 часов точно соответствует часовому поясу вашего местоположения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...