我正在尝试这个(datetime.datetime.today()-datetime.datetime.today()).days
给-1
并期望值为0而不是-1。在这种情况下,我将结果添加1
有人可以告诉我为什么吗?
答案 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
或者,当.days
或timedelta
非零时,在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天,这是正确的结果。