python - time.mktime 不接受 1900 年之前的年份?

标签 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

这是预期的行为吗?这对我来说有点奇怪。似乎不可能溢出 double 仅仅 -71 年。

最佳答案

这是预期的行为。

  • 第一个记录在 Python 2.7 docs under Year 2000 (Y2K) issues 中.上面写着

    Values 100–1899 are always illegal.

    Python 3 支持这些日期,因此没有此类限制 ( docs )。

  • 具有负日期的第二个点也是预期的。日期在 seconds since the epoch 中(自 1970 年 1 月 1 日 00:00:00 UTC 以来的秒数)。因此在此之前的日期存储为负数。

关于python - time.mktime 不接受 1900 年之前的年份?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24487567/

相关文章:

python - 如何按名称获取列的索引?

python - 如何使用 Python 在 Raspberry Pi 和 Bluegiga WT11i 蓝牙模块之间建立连接?

python - 找到 2 个堆栈的交集的最快和最有效的方法

loops - for循环中的Python循环计数器

python - django 管理站点 - 划分对象属性部分

python - Django REST 仅列表(无详细信息)ViewSet

python-2.7 - Pandas 与前一天的价格变化率差异

python - 将 mysql 连接到 django

python - 如何检测用户是否输入了任何数据作为控制台输入

python - 将文件内容存储在缓冲区中并将其分配给 Python 中的指针