我正在尝试这个(datetime.datetime.today()-datetime.datetime.today()).days捐赠-1
期望值为0,而不是得到-1。在本例中,我向结果添加了1。
谁能告诉我原因吗?
发布于 2017-05-17 12:08:16
当你减去日期的时候,有一个微秒的差别。假设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天的结果,这是一个正确的结果。
发布于 2017-02-21 07:27:29
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微秒。
如果需要“绝对”数字,请使用 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或microseconds为非零时,向seconds或microseconds的seconds属性添加1:
td = datetime.datetime.today() - datetime.datetime.today()
days = td.days + (1 if td.seconds or td.microseconds else 0)发布于 2017-02-21 07:30:19
尝试将数据存储在变量中:
>>> a = datetime.datetime.today()
>>> a-a
datetime.timedelta(0)
>>> (a-a).days
0你会得到零。
虽然这是正确的解释您的答案:Martin Pieters' Answer
https://stackoverflow.com/questions/42361050
复制相似问题