考虑以下片段:
import datetime
print(datetime.datetime.now() - datetime.datetime.now())
在 x86_64 Linux 下的 Python 2.7.8 上,我得到 -1 天,23:59:59.999940。为什么会这样?
请您参考如下方法:
查看datetime.timedelta 文档:
Note that normalization of negative values may be surprising at first. For example,
>>> from datetime import timedelta >>> d = timedelta(microseconds=-1) >>> (d.days, d.seconds, d.microseconds) (-1, 86399, 999999)
您有一个负的时间增量,并且归一化始终使用正数表示秒和微秒。
要存储负增量,那么只有 .days 属性可以存储负值,您最终得到 -1 天加正数秒和微秒:
>>> import datetime
>>> td = datetime.datetime.now() - datetime.datetime.now()
>>> print(td)
-1 day, 23:59:59.999988
>>> td
datetime.timedelta(-1, 86399, 999988)
>>> td.days
-1
>>> td.seconds
86399
>>> td.microseconds
999988
>>> (24 * 60 * 60) # 1 day in seconds
86400
>>> (24 * 60 * 60) - td.seconds
1
>>> 1000000 - td.microseconds
12
所以 timedelta 实际上表示 -12 微秒,但相对于 -1 天表示为 +86399 秒和 +999988 微秒。
