time.mktime不接受1900年之前的一年?

时间:2014-06-30 10:02:11

标签: python python-2.7

在python 2.7 time.mktime不接受1900年之前的一年,这很奇怪。

>>> time.mktime(time.strptime("1/1/1899","%d/%m/%Y"))
Traceback (most recent call last):
  File "<pyshell#293>", line 1, in <module>
    time.mktime(time.strptime("1/1/1899","%d/%m/%Y"))
ValueError: year out of range

但calendar.timegm可以完成所有值。

>>> calendar.timegm(time.strptime("1/1/1899","%d/%m/%Y"))
-2240524800

>>> calendar.timegm(time.strptime("1/1/0001","%d/%m/%Y"))
-62135596800

这是预期的行为吗?这对我来说很奇怪。似乎不可能在-71年内溢出一倍。

2 个答案:

答案 0 :(得分:4)

这是预期的行为。

答案 1 :(得分:2)

您发现的问题与time.mktime所依赖的平台特定时间实施有关:

  

它可以产生时间的最早日期取决于平台。

https://docs.python.org/3/library/time.html#time.mktime

calendar.timegm是一个完全独立的实现,恰好与时间元组一起运行。这个元组存储整年,因此它可以轻松地代表1900年之前的日期。

https://docs.python.org/2/library/time.html#time.struct_time