如何检查两个日期之间的差异(以秒为单位)?


180

必须有一种更简单的方法来执行此操作。我有想要经常刷新的对象,因此我想记录它们的创建时间,对照当前时间戳进行检查,并根据需要刷新。

事实证明datetime.datetime很困难,我也不想深入ctime库。这样的事情有什么容易的吗?

Answers:


515

如果要计算两个已知日期之间的差异,请使用total_seconds以下方法:

import datetime as dt

a = dt.datetime(2013,12,30,23,59,59)
b = dt.datetime(2013,12,31,23,59,59)

(b-a).total_seconds()

86400.0

#note that seconds doesn't give you what you want:
(b-a).seconds

0


95
“注释”是人们最想念的部分。我希望我可以再投票一次。
Dexter 2013年

有时我注意到它给出了看似...不正确的结果。瞬间差59.800秒。因此,对于较小的操作(例如,秒,毫秒或微秒之差),可以使用 (b-a).microseconds然后除以秒(1000000)或毫秒(1000)
Zld Productions

它出现的值总是正的,即使a和b交换
Nickpick

@Nickpick值并不总是正数。例如,以下为-60from datetime import datetime; (datetime(2019, 1, 1, 0, 0) - datetime(2019, 1, 1, 0, 1)).total_seconds()
JDiMatteo

令人印象深刻的解决方案!创建函数不需要干净的代码。
Paulo zOiO zuLLuFabrício19年

35
import time  
current = time.time()

...job...
end = time.time()
diff = end - current

那对你有用吗?


1
+1; 我们实际上并不在乎任何调用的日期-我们在乎所经过的时间。因此,只需使用原始时间戳,如图所示。
Karl Knechtel 2010年

14
>>> from datetime import datetime

>>>  a = datetime.now()

# wait a bit 
>>> b = datetime.now()

>>> d = b - a # yields a timedelta object
>>> d.seconds
7

(7将是您在上面等待的时间长短)

我发现datetime.datetime非常有用,因此,如果您遇到了复杂或尴尬的情况,请告诉我们。

编辑:感谢@WoLpH指出,人们不一定总是希望刷新得如此频繁,以至于日期时间会接近。通过考虑增量中的天数,您可以处理更长的时间戳差异:

>>> a = datetime(2010, 12, 5)
>>> b = datetime(2010, 12, 7)
>>> d = b - a
>>> d.seconds
0
>>> d.days
2
>>> d.seconds + d.days * 86400
172800

1
如果您选择退货d.seconds + d.days * 86400,则可以在多天内改正;)
Wolph 2010年

7
注意,在一般情况下,这是不正确的。考虑以下情况a - b:在之前a是(即结果为负):while 。我相信正确的方法是使用…但这仅是py2.7 +。 b(a - b).seconds == 86282a - b == datetime.timedelta(-1, 86276, 627665)timedelta.total_seconds()
David Wolever

4
确实,答案不正确,应该反映@DavidWolever的评论。正确的答案是:使用timedelta.total_seconds()。相应地降低了票数。
astrojuanlu 2013年

3
支持Python 2.6答案。 total_seconds()是2.7+的功能。
Joe Holloway 2014年

@JoeHolloway我想这在Python 2.6中也无法正常工作。
zen11625 '18

12

我们在Python 2.7中提供了total_seconds()函数,请参见下面的python 2.6代码

import datetime
import time  

def diffdates(d1, d2):
    #Date format: %Y-%m-%d %H:%M:%S
    return (time.mktime(time.strptime(d2,"%Y-%m-%d %H:%M:%S")) -
               time.mktime(time.strptime(d1, "%Y-%m-%d %H:%M:%S")))

d1 = datetime.now()
d2 = datetime.now() + timedelta(days=1)
diff = diffdates(d1, d2)

0

这是为我工作的人。

from datetime import datetime

date_format = "%H:%M:%S"

# You could also pass datetime.time object in this part and convert it to string.
time_start = str('09:00:00') 
time_end = str('18:00:00')

# Then get the difference here.    
diff = datetime.strptime(time_end, date_format) - datetime.strptime(time_start, date_format)

# Get the time in hours i.e. 9.60, 8.5
result = diff.seconds / 3600;

希望这可以帮助!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.