(datetime.datetime.today() - datetime.datetime.today())。days give -1

时间:2017-02-21 07:24:37

标签: python datetime

我正在尝试这个(datetime.datetime.today()-datetime.datetime.today()).days给-1

并期望值为0而不是-1。在这种情况下,我将结果添加1

有人可以告诉我为什么吗?

3 个答案:

答案 0 :(得分:5)

timedelta个对象必须始终具有个秒和微秒;表达负增量的方式是使用负天数。然后秒和微秒从那些负数日开始计算另一个方向。

datetime.datetime.today()生成完整的日期和时间,以微秒为单位。第二个调用稍后执行,而减去这两个调用会给你一个负时间值。

结果,你得到一个时间差为-1天的差异和正数秒几乎等于一整天,除了一小段时间:

>>> import datetime
>>> datetime.datetime.today()
datetime.datetime(2017, 2, 21, 7, 27, 43, 523202)
>>> datetime.datetime.today() - datetime.datetime.today()
datetime.timedelta(-1, 86399, 999990)

请注意生成的timedelta对象中的86399秒和999990微秒。差异不是一整天,只有10微秒。

如果您需要“绝对”号码,请使用timedelta.total_seconds() method

>>> (datetime.datetime.today() - datetime.datetime.today()).total_seconds()
-8e-06

再将它除以86400以获得若干天:

>>> int((datetime.datetime.today() - datetime.datetime.today()).total_seconds() / 86400)
0
>>> int((datetime.datetime.today() - datetime.timedelta(days=2, seconds=10) - datetime.datetime.today()).total_seconds() / 86400)
-2

或者,当.daystimedelta非零时,在seconds的{​​{1}}属性中添加1:

microseconds

答案 1 :(得分:0)

尝试将数据存储在变量中:

>>> a = datetime.datetime.today()
>>> a-a
datetime.timedelta(0)
>>> (a-a).days
0

你会得到零。

虽然这是您答案的正确解释: Martin Pieters' Answer

答案 2 :(得分:0)

当您减去日期时,存在微秒差异。 假设datetime.datetime.today()正在给出

>>> datetime.datetime.today()`
datetime.datetime(2017, 5, 17, 17, 33, 45, 243739)
>>> datetime.datetime.today()
datetime.datetime(2017, 5, 17, 17, 33, 45, 727018)

从中您可以看到两者都在相同的秒时间戳中运行,但是微分差异。 所以,当你做的时候

(datetime.datetime.today()-datetime.datetime.today()).days

结果会得到-1天,这是正确的结果。