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

Ale*_*lex 153 python time datediff

必须有一种更简单的方法来做到这一点.我有想要每隔一段时间刷新的对象,所以我想记录它们的创建时间,检查当前的时间戳,并根据需要进行刷新.

datetime.datetime已被证明是困难的,我不想深入了解ctime库.这种事情有什么比较容易的吗?

Ric*_*ell 445

如果要计算两个已知日期之间的差异,请使用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()
Run Code Online (Sandbox Code Playgroud)

86400.0

#note that seconds doesn't give you what you want:
(b-a).seconds
Run Code Online (Sandbox Code Playgroud)

0

  • "笔记"是人们错过的最重要的部分.我希望我可以对此进行另一次投票. (78认同)
  • 这很有帮助。但是为什么 python 总是给出 `(ba).seconds` 的错误答案呢? (6认同)
  • @enchance这是因为 (ba).seconds 只表示差异的秒部分。还有 (ba). 分钟 , (ba). 小时 , ... (6认同)

mat*_*eek 31

import time  
current = time.time()

...job...
end = time.time()
diff = end - current
Run Code Online (Sandbox Code Playgroud)

那会对你有用吗?

  • +1; 我们并不真正关心任何一个调用的日期——我们关心经过的时间。所以只需使用原始时间戳,如图所示。 (2认同)

Jar*_*die 14

>>> from datetime import datetime

>>>  a = datetime.now()

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

>>> d = b - a # yields a timedelta object
>>> d.seconds
7
Run Code Online (Sandbox Code Playgroud)

(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
Run Code Online (Sandbox Code Playgroud)

  • 请注意,在一般情况下,这是*不正确*.考虑一个例子`a - b`,其中`a`是*之前的*`b`(即结果将是负数):`(a - b).seconds == 86282`而`a - b == datetime.timedelta(-1,86276,627665)`.我相信正确的方法是使用`timedelta.total_seconds()`...但这只是py2.7 +. (7认同)
  • 实际上,答案是不对的,应该反映@DavidWolever评论.正确答案是:使用`timedelta.total_seconds()`.相应地下调. (4认同)
  • Upvoted for Python 2.6回答.`total_seconds()`是一个2.7+的功能. (3认同)

Pra*_*aur 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)
Run Code Online (Sandbox Code Playgroud)