【问题标题】:What is the meaning of datetime values less than datetime.min?datetime 值小于 datetime.min 是什么意思?
【发布时间】:2012-11-01 22:27:26
【问题描述】:

这里发生了什么?

这是预期的:

>>> datetime.min - timedelta(days=1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OverflowError: date value out of range

意外:

>>> datetime.min - timedelta(days=2)
datetime.datetime(1, 0, 255, 0, 0)

>>> datetime.min > (datetime.min - timedelta(days=2))
True

在 python 中,从 datetime.min 中减去这些值意味着什么?它们代表什么日期?为什么有些情况不会触发OverflowError?

【问题讨论】:

    标签: python datetime timedelta


    【解决方案1】:

    因为你需要升级到 Python 2.6 或更高版本,修复了这个 bug。

    $ python2.5 -c 'import datetime; print(datetime.datetime.min - datetime.timedelta(days=2))'
    0001-00-255 00:00:00
    $ python2.6 -c 'import datetime; print(datetime.datetime.min - datetime.timedelta(days=2))'
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
    OverflowError: date value out of range
    $ python2.7 -c 'import datetime; print(datetime.datetime.min - datetime.timedelta(days=2))'
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
    OverflowError: date value out of range
    $ python3.3 -c 'import datetime; print(datetime.datetime.min - datetime.timedelta(days=2))'
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
    OverflowError: date value out of range
    

    您是否需要有人跟踪错误编号、补丁和 python-dev 讨论,或者这些信息对您来说是否足够?

    【讨论】:

    • 啊,太完美了。我什至从未想过这会是一个解释器中的错误!谢谢!
    • 我的python是2.6.5版,顺便说一句,但我知道从这里去哪里。
    • 嗯,这可能是标准库中的错误,而不是解释器中的错误……而且,我从未想过它会在 2.6.5 和 2.6.7(我使用的 2.6上面),但现在我想起来,它就像固定在 2.5 和 2.6 之间一样合理......
    • 这仍然在 python 3.4 上发生
    猜你喜欢
    • 1970-01-01
    • 2018-05-09
    • 1970-01-01
    • 2014-04-10
    • 1970-01-01
    • 1970-01-01
    • 2018-02-13
    • 2014-06-30
    • 1970-01-01
    相关资源
    最近更新 更多