Python持续时间比较

时间:2016-03-22 05:30:33

标签: python datetime time comparison timedelta

我试图在一秒的准确度内进行两次比较,但我发现有时代码的计算方式不同而且我的比较不起作用而且循环无限地执行。我在下面粘贴了我的代码,供参考

start_time = datetimenow() #datetimenow is a function which returns time w/o microseconds             
end_time =  start_time + timedelta(seconds = GrabDuration)
while datetimenow() != end_time: #this part fails sometimes and passes sometimes
    time.sleep(Grabtime)
    saveas(imggrab())

如果您有任何其他更好的方式来比较时间和持续时间,我将不胜感激,如果您可以分享。 GrabDuration& Grabtime是用户给定的持续时间变量。

2 个答案:

答案 0 :(得分:1)

我假设datetimenow正在返回标准datetime.datetime对象,所以基本上就是这样:

from datetime import datetime

def datetimenow():
    return datetime.now()

datetime个对象与==!=进行比较会使其有点棘手,因为它们需要一段时间才能使它们不相等。

作为测试,只需在Python REPL中尝试这些行(假设也输入了上面的行,因此datetimenow()函数可以调用:

datetimenow() == datetimenow()

在多次尝试中,您可能会得到一些False结果。

我建议将datetime个对象与更安全的比较运算符进行比较,如下所示:

while datetimenow() <= end_time:
    time.sleep(Grabtime)
    saveas(imggrab())

答案 1 :(得分:0)

import datetime
import time
start_time = datetime.datetime.now()
end_time = start_time + datetime.timedelta(seconds = GrabDuration)
while start_time != end_time:
    time.sleep(Grabtime)

如果你在开始时间和结束时间之间进行比较,那么只有当start_time不等于end_time

时,代码的while循环才会执行无限次。

但是您共享的代码,在while循环中,您再次使用当前系统时间而不使用strat_time变量进行比较。请检查一下。

您还可以使用datetime.datetime.now()。time()方法,例如datetime.datetime.now()。time()&lt; datetime.time(小时= 2,分钟= 10,秒= 10)。这可以帮助您解决问题。