Skip to main content
 首页 » 编程设计

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

2025年05月04日15yxwkf

考虑以下片段:

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 微秒。