为什么datetime.datetime.now() - datetime.datetime.now()等于datetime.timedelta(-1,86399,999974)?

时间:2015-02-23 15:51:14

标签: python datetime

请考虑以下代码段:

import datetime
print(datetime.datetime.now() - datetime.datetime.now())

在x86_64 Linux下的Python 2.7.8上,我得到了-1 day, 23:59:59.999940。为什么会这样?

1 个答案:

答案 0 :(得分:6)

请参阅datetime.timedelta文档:

  

请注意,负值的标准化最初可能会令人惊讶。例如,

>>> from datetime import timedelta
>>> d = timedelta(microseconds=-1)
>>> (d.days, d.seconds, d.microseconds) (-1, 86399, 999999)

你有一个负时间delta,标准化总是使用正数秒和微秒。

要存储负增量,只有 .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微秒。