为什么我的代码无法理解在if语句中进行比较的时间变量?

问题描述

我写了一个程序在设定的某个时间运行一段代码,但是问题是该程序无法理解用于比较的时间变量(没有任何错误,但不能按应有的方式工作),并且当程序达到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 ()。并让操作系统为您处理。