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

时间:2018-02-20 10:00:33

标签: python datetime diff

我遇到了一个问题,或者很可能会轮流出现问题!不确定,想知道!!在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

2 个答案:

答案 0 :(得分:4)

根据timedelta object

的文档
  

如果天数的标准化值超出指定范围,   引发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;时间目前正在进行
  • 你有两个这样的电话(即使它们在同一条线上)。由于现在 CPU 速度非常高,所以每次这样的调用都需要很短的时间(远小于微秒,我猜)
  • 但是,当1 st 调用处于(微秒?)周期的最后,并且2 nd 调用处于下一个的开始时,你会得到这种行为:
>>> 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 调用的结果
  • 假设2 nd datetime.datetime.now()调用在1微秒后发生(我使用delta对象重现行为,因为这里涉及的时间太小了让我能够在遇到此行为时完全时运行该行。这放在now1
  • 当减去它们时,你会得到负值(在我的情况下是-delta),因为now0发生在now1之前(检查[Python]: timedelta Objects以获取更多详细信息)
相关问题