现在的日期时间与现在的日期时间的Python差异

Viv*_*nan 5 python diff datetime

我遇到了问题,或者很有可能会轮流使用!不确定,想知道!!在python的datetime库中,获取时间差,如下面的代码段所示。

>>> import datetime
>>> datetime.datetime.now() - datetime.datetime.now()
datetime.timedelta(-1, 86399, 999958)
>>> tnow = datetime.datetime.now()
>>> datetime.datetime.now() - tnow
datetime.timedelta(0, 4, 327859)
Run Code Online (Sandbox Code Playgroud)

我想了解为什么datetime.datetime.now() - datetime.datetime.now()产生的输出为-1天,即86399秒,而将当前时间分配给某个变量并计算差值则得到所需的输出0天,即4秒

结果似乎有点令人困惑,如果有人可以解码后面发生的情况,这将很有帮助

注意:我使用的是Python 2.7

Vik*_*ngh 5

根据timedelta对象的文档

如果天的标准化值超出指定的范围,则会引发OverflowError。

请注意,负值的标准化一开始可能令人惊讶。例如:

>>> from datetime import timedelta
>>> d = timedelta(microseconds=-1)
>>> (d.days, d.seconds, d.microseconds)
(-1, 86399, 999999)
Run Code Online (Sandbox Code Playgroud)

这对python 2.7和3均有效。

为什么会这样很简单:

a , b = datetime.datetime.now(), datetime.datetime.now()
# here datetime.now() in a will be <= b.
# That is because they will be executed separately at different CPU clock cycle.

a - b
# datetime.timedelta(-1, 86399, 999973)

b - a
# datetime.timedelta(0, 0, 27)
Run Code Online (Sandbox Code Playgroud)

要获得适当的时差:

(tnow - datetime.datetime.now()).total_seconds()
# output: -1.751166
Run Code Online (Sandbox Code Playgroud)

该答案提供了有关如何安全使用时间增量的更多信息(处理负值)链接