关于时区:Python – calendar.timegm()与time.mktime()

Python - calendar.timegm() vs. time.mktime()

我似乎很难理解这一点。

calendar.timegm()time.mktime()之间有什么区别?

假设我有一个没有连接tzinfo的datetime.datetime,两个不应该给出相同的输出吗? 难道他们都没有给出纪元和作为参数传递的日期之间的秒数? 而且由于传递的日期没有tzinfo,那个秒数不一样吗?

1
2
3
4
5
6
7
8
9
>>> 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小时的结果差异与您所在位置的时区完全一致。