我遇到了一个问题,或者很可能反过来!不确定,想知道!在 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)
我想了解为什么 datetime.datetime.now() - datetime.datetime.now()
在分配时将输出生成为 -1 天,86399 秒某些变量的当前时间和计算差异给出了所需的输出 0 天 4 秒。
结果似乎有点困惑,如果有人能破解背后的原因会很有帮助
注意:我使用的是 Python 2.7
最佳答案
根据 timedelta object 的文档
If the normalized value of days lies outside the indicated range, OverflowError is raised.
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)
这对 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)
获取正确的时差:
(tnow - datetime.datetime.now()).total_seconds()
# output: -1.751166
此答案提供了有关如何安全使用时间增量(处理负值)的更多信息 Link
关于Python 现在日期时间与现在日期时间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48882468/