我正在编写一个程序,如果now == specific time and day
会执行某些操作,如果不相等,请等到那个时候。
我有一个morning
,evening
,days
值,它们显示开始时间,结束时间和今天。我想制作一个程序来检查今天是否是工作日和特定时间(在morning
和evening
之间),如果True
做某事,甚至其中之一是{{1 }},要等到那个时候,然后再做点什么。
我是用False
来做的,但是当它以while loop
的值开头(不是在正确的时间)时,它将继续打印False
,即使该时间到了并且值应该更改为{{1 }},但当我在正确的时间启动它时,它会显示False
。
代码如下:
True
答案 0 :(得分:2)
您只初始化一次now
变量,就永远不会将其值更新为当前的 now 。您应该在while
循环内更新值,例如:
while dayz == False or timerange == False:
sleep(5)
now = datetime.datetime.now()
...
答案 1 :(得分:1)
如果您有兴趣查看代码中确定早上和晚上的时间,可以使用以下代码段:
from datetime import datetime
from datetime import timedelta
from time import sleep
morning_hour = 9
evening_hour = 16
while True:
curr_time = datetime.now()
print("Current time : {0}".format(curr_time))
if curr_time.hour < morning_hour or curr_time.hour > evening_hour or not curr_time.isoweekday():
print("Job start conditions not met. Determining sleep time")
add_days = 0
current_day = curr_time.weekday() == 4
# Add 3 days for fridays to skip Sat/Sun
if current_day == 4:
add_days = 3
# Add 2 days for Saturdays to skip Sunday
elif current_day == 5:
add_days = 2
else:
add_days = 1
next_window = (curr_time + timedelta(days=add_days)).replace(hour=9, minute=0,second=0,microsecond=0)
delta = next_window - datetime.now()
print("Sleep secs : {0}".format(delta.seconds))
sleep(delta.seconds)
else:
print("Do something")
break