Python datetime减法 - 错误的结果?

时间:2009-10-16 00:04:46

标签: python datetime

我必须在这里做错事,有什么想法吗?

>>> (datetime.datetime(2008,11,7,10,5,14)-datetime.datetime(2008,11,6,9,30,16)).seconds
2098

它应该超过那么多秒。

5 个答案:

答案 0 :(得分:10)

timedelta.seconds为您提供timedelta的seconds字段。但它也有days字段(和milliseconds字段)。

所以你想要像

这样的东西
delta = datetime.datetime(2008,11,7,10,5,14)-datetime.datetime(2008,11,6,9,30,16)
delta.seconds + delta.days*86400

答案 1 :(得分:2)

实际上它返回的是一个具有日期字段的timedelta,即

c.seconds = 2098

但是

c.days = 1

答案 2 :(得分:2)

我不知道还有total_seconds例子。 它适用于python2和python3。这是获得timedelta总秒数的最简单方法。

在你的情况下

In [5]: (datetime.datetime(2008,11,7,10,5,14)-datetime.datetime(2008,11,6,9,30,1
   ...: 6)).seconds
Out[5]: 2098

In [6]: (datetime.datetime(2008,11,7,10,5,14)-datetime.datetime(2008,11,6,9,30,1
   ...: 6)).total_seconds()
Out[6]: 88498.0

另一个例子:

In [1]: from datetime import datetime
In [2]: d1 = datetime(2018,1,1)
In [3]: d2 = datetime(2018,1,3)
In [4]: td = d2 - d1
In [5]: td.seconds
Out[5]: 0
In [6]: td.days
Out[6]: 2
In [7]: td.total_seconds()
Out[7]: 172800.0

答案 3 :(得分:1)

timedelta.seconds不是总秒数,它是在计算天数后的余数(以秒为单位)。使用您的示例:

>>> import datetime
>>> (datetime.datetime(2008,11,7,10,5,14)-datetime.datetime(2008,11,6,9,30,16))
datetime.timedelta(1, 2098)

datetime.timedelta(1, 2098)表示您的timedelta 1天 2098秒

你想要的是:

>>> delta = (datetime.datetime(2008,11,7,10,5,14)-datetime.datetime(2008,11,6,9,30,16))
>>> (delta.days * 86400) + delta.seconds
88498

答案 4 :(得分:1)

datetime.datetime(2008,11,7,10,5,14)-datetime.datetime(2008,11,6,9,30,16)返回datetime.timedelta个对象,该对象具有days属性。您计算的差异实际上是1天和2098秒。