使用Python计算启用真除法的datetime模块的总秒数

使用Python计算启用真除法的datetime模块的总秒数,python,datetime,Python,Datetime,我试图对日期做一些计算,我有一个timedelta对象,我想得到秒数。似乎dt.total_seconds()正是我所需要的,但不幸的是,它是在Python2.7中引入的,我只能使用较旧的版本 如果我阅读,它说明如下: from __future__ import division 返回持续时间中包含的总秒数。相当于(td.微秒+(td.秒+td.天*24*3600)*10**6)/10**6在启用真除法的情况下计算的 在查看了datetime模块(C语言)的源代码后,我看到如下内容: tot

我试图对日期做一些计算,我有一个
timedelta
对象,我想得到秒数。似乎
dt.total_seconds()
正是我所需要的,但不幸的是,它是在Python2.7中引入的,我只能使用较旧的版本

如果我阅读,它说明如下:

from __future__ import division
返回持续时间中包含的总秒数。相当于(td.微秒+(td.秒+td.天*24*3600)*10**6)/10**6在启用真除法的情况下计算的

在查看了
datetime
模块(C语言)的源代码后,我看到如下内容:

total_seconds = PyNumber_TrueDivide(total_microseconds, one_million);

因此,虽然计算
total_seconds()
似乎微不足道,但这让我想知道真除法实际上意味着什么。我找不到有关该主题的任何信息。如果我只使用正则除法,会发生什么?为什么我们需要这个真正的除法?它做什么?我可以用Python编写文件中给出的等效值吗?

如果使用真除法,
1/2
将导致
0.5
。Python2.x中的默认行为是使用整数除法,其中
1/2
将导致
0
。以下是来自以下方面的解释:

普通或长整数除法产生相同类型的整数;结果是应用“地板”函数对结果进行数学除法

要在Python 2.2或更高版本上启用true division(在Python 3.x上不需要),可以使用以下命令:

from __future__ import division
或者,您可以将其中一个参数设置为浮点,以获得相同的行为:

(td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10.0**6

当您在代码中使用数字时,最简单的方法就是在第一个除法上使用浮点


如果您使用10.0**6,您的结果将是一个浮点数,这意味着公式中的所有其他数字也将是浮点数,这将导致“真除法”。

+1个好问题!文档在这一点上应该更清晰。@JohnMachin这并没有改变文档在这个主题上不清楚的事实。谢谢你的建设性评论。