Python时长比较

2024-10-01 00:20:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在一秒钟的精度内比较两次,但是我发现有些时候代码计算不同,我的比较不起作用,循环无限执行。我把我的代码粘贴在下面,以供参考

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是用户给定的持续时间变量。在


Tags: 代码whichtimeis粘贴精度functionstart
2条回答

我假设datetimenow返回一个标准的datetime.datetime对象,所以基本上是这样的:

from datetime import datetime

def datetimenow():
    return datetime.now()

datetime对象与==或{}进行比较会有点棘手,因为它们不相等需要一点时间。在

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

^{pr2}$

在多次尝试中很有可能,你会得到一些False的结果。在

我建议使用更安全的比较运算符比较datetime对象,如下所示:

while datetimenow() <= end_time:
    time.sleep(Grabtime)
    saveas(imggrab())
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)

如果您比较了开始时间和结束时间,那么只有在开始时间不等于结束时间时,代码的这个while循环才会执行无限次

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

你也可以使用日期时间。日期时间。现在().time()方法也喜欢日期时间。日期时间。现在().time()<;日期时间.time(小时=2,分钟=10,秒=10)。这可以帮助你解决你的顾虑。在

相关问题 更多 >