等到特定时间

时间:2019-04-09 00:04:44

标签: python python-3.x time

我正在编写一个程序,如果now == specific time and day会执行某些操作,如果不相等,请等到那个时候。

我有一个morningeveningdays值,它们显示开始时间,结束时间和今天。我想制作一个程序来检查今天是否是工作日和特定时间(在morningevening之间),如果True做某事,甚至其中之一是{{1 }},要等到那个时候,然后再做点什么。

我是用False来做的,但是当它以while loop的值开头(不是在正确的时间)时,它将继续打印False,即使该时间到了并且值应该更改为{{1 }},但当我在正确的时间启动它时,它会显示False

代码如下:

True

2 个答案:

答案 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