我遇到了一个问题,或者很可能会轮流出现问题!不确定,想知道!!在python的日期时间库中,为了获得时间差异,如下面的代码片段所示。
https://facebook.com/{$page_id}/posts/{$post_id}?comment_id={$comment_id}
我想了解为什么>>> 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)
产生的输出为 -1天,86399秒,而将当前时间分配给某个变量和计算差异会产生所需的输出 0天, 4秒。
结果似乎有点令人困惑,如果有人可以解释落后的事情会有所帮助
注意:我使用的是Python 2.7
答案 0 :(得分:4)
如果天数的标准化值超出指定范围, 引发OverflowError。
请注意,负值的标准化最初可能会令人惊讶。 例如:
>>> 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
的更多信息答案 1 :(得分:2)
你遇到了“角落案件”的情况。
datetime.datetime.now()
生成一个datetime.datetime
对象([Python]: https://docs.python.org/3/library/datetime.html#datetime-objects),这是当前日期&amp;时间目前正在进行 >>> import datetime >>> now0 = datetime.datetime.now() >>> now0 datetime.datetime(2018, 2, 20, 12, 23, 23, 1000) >>> delta = datetime.timedelta(microseconds=1) >>> now1 = now0 + delta >>> now0 - now1 datetime.timedelta(-1, 86399, 999999)
<强>解释强>:
now0
成为对datetime.datetime.now()
进行的1 st 调用的结果datetime.datetime.now()
调用在1微秒后发生(我使用delta
对象重现行为,因为这里涉及的时间太小了让我能够在遇到此行为时完全时运行该行。这放在now1
-delta
),因为now0
发生在now1
之前(检查[Python]: timedelta Objects以获取更多详细信息)