首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(datetime.datetime.today()-datetime.datetime.today()).days给予-1

(datetime.datetime.today()-datetime.datetime.today()).days给予-1
EN

Stack Overflow用户
提问于 2017-02-21 07:24:36
回答 3查看 495关注 0票数 3

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

期望值为0,而不是得到-1。在本例中,我向结果添加了1。

谁能告诉我原因吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-05-17 12:08:16

当你减去日期的时候,有一个微秒的差别。假设datetime.datetime.today()给出了

代码语言:javascript
复制
>>> datetime.datetime.today()`
datetime.datetime(2017, 5, 17, 17, 33, 45, 243739)
>>> datetime.datetime.today()
datetime.datetime(2017, 5, 17, 17, 33, 45, 727018)

从这里您可以看到,两者运行在相同的秒,时间戳,但微小的分数差。所以,当你做了

代码语言:javascript
复制
(datetime.datetime.today()-datetime.datetime.today()).days

你将得到-1天的结果,这是一个正确的结果。

票数 0
EN

Stack Overflow用户

发布于 2017-02-21 07:27:29

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

datetime.datetime.today()生成完整的日期和时间,用微秒完成。第二个调用在一秒钟后执行,减去这两个,就会得到一个负的时间增量。

因此,您将得到一个时间增量,即-1天差和几乎等于一天的正数秒数,除了一小部分秒之外:

代码语言:javascript
复制
>>> 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

代码语言:javascript
复制
>>> (datetime.datetime.today() - datetime.datetime.today()).total_seconds()
-8e-06

再除以86400,有几天的时间:

代码语言:javascript
复制
>>> 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

或者,当.daysmicroseconds为非零时,向secondsmicrosecondsseconds属性添加1:

代码语言:javascript
复制
td = datetime.datetime.today() - datetime.datetime.today()
days = td.days + (1 if td.seconds or td.microseconds else 0)
票数 5
EN

Stack Overflow用户

发布于 2017-02-21 07:30:19

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

代码语言:javascript
复制
>>> a = datetime.datetime.today()
>>> a-a
datetime.timedelta(0)
>>> (a-a).days
0

你会得到零。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42361050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档