请考虑以下代码段:
import datetime
print(datetime.datetime.now() - datetime.datetime.now())
在x86_64 Linux下的Python 2.7.8上,我得到了-1 day, 23:59:59.999940
。为什么会这样?
答案 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微秒。