问题描述
我写了一个程序在设定的某个时间运行一段代码,但是问题是该程序无法理解用于比较的时间变量(没有任何错误,但不能按应有的方式工作),并且当程序达到if语句中的限制时,它不会停止,因此它会保留我不需要的时间和分钟。如果有人帮助我,我将非常感谢。
from datetime import time,datetime
while True:
Now = datetime.Now()
end = datetime(2020,9,29,16,37,5,850000)
Now_str = str(Now)
end_str = str(end)
diff = end - Now
print(diff)
if Now_str == end_str:
break
其余代码将在if语句之后。
解决方法
您可以比较时间戳本身,而不是比较字符串。当您要运行代码直到到达结束时间戳时,请使用> =进行比较,而不要使用==进行比较,因为代码可能没有在确切的时刻评估结束时间戳,并且永远不会满足equals条件。>
这是您的代码的外观:
from datetime import time,datetime
while True:
now = datetime.now()
end = datetime(2020,9,30,15,36,5,850000)
diff = end - now
print(diff)
if now >= end:
break
,
您应该能够使用 compare datetimes directly:
>>> n1 = datetime.now()
>>> n2 = datetime.now()
>>> n1
datetime.datetime(2020,34,32,350522)
>>> n2
datetime.datetime(2020,39,373229)
>>> n1 < n2
True
您应避免将==
与datetime.now()
一起使用来结束循环,因为它们是如此精确,以至于微秒的差异可能意味着您超出了计划的结束时间。请改用if now >= end:
。
这是另一个建议。
from datetime import datetime
import time
now = datetime.now()
end = datetime(year=2020,month=9,day=30,hour=15,minute=40,second=0,microsecond=850000)
diff = end - now
print("trying to sleep for {} seconds!".format(diff.total_seconds()))
try:
time.sleep(diff.total_seconds())
except:
# when the difference "diff" is negative,the sleep() function with raise an exception
print("Oups,No time to sleep!")
print("Run the code here...!")
使用循环来等待时间结束并不是一个好主意。由于这些指令将在尝试使用尽可能多的CPU时重复执行,直到条件成立为止。
我认为您最好使用time.sleep ()
。并让操作系统为您处理。