首页 > 解决方案 > Python - 虽然循环不适用于时间

问题描述

我有一个启动main 函数的代码。在这个函数中有一个while loop在特定时间到来时应该启动程序。我已经在 morning(开始时间)、evening(结束时间)变量中设置了这个时间。它在while循环中并且可以工作,但前提是我在我想使用它的那天启动程序。例如:当我星期一晚上(20:00)开始并且start时间(morning变量)是从 8:00(第二天)开始时,它将继续循环

print("等待合适的时间") <=(这样做)

就算第二天到了那个时候。但是当我第二天在 6:00 左右开始它时它会起作用......

有人可以解释一下,为什么会这样?这是代码

import datetime
from time import sleep
from datetime import date


#variables
now = datetime.datetime.now()
morning = now.replace(hour=8, minute=0, second=0, microsecond=0)
evening = now.replace(hour=16, minute=15, second=0, microsecond=0)

#function for time-setting
def time_in_range(morning, evening, x):
    if morning <= evening:
        return morning <= x <= evening
    else:
        return morning <= x or x <= evening


timerange = time_in_range(morning, evening, now)


#main function
def main():
    while True:
# Time period check
        if date.today().weekday() < 5 and date.today().weekday() >= 0:
            dayz = True
        else:
            dayz = False
        if dayz != True:
            print("Waiting for the day")
            sleep(3600)
            continue
        now = datetime.datetime.now()
        timerange = time_in_range(morning, evening, now)
        if timerange != True:  # HERE IT MAKES THE TROUBLE
            print("Waiting for the right time")
            sleep(200)
            continue
        print("do something")

main()

print("end of code")

标签: pythonpython-3.xdatewhile-loop

解决方案


当您调用.replace()设置morningevening时间时,它会将当前日期保留为datetime对象的一部分。因此,如果您在前一天调用它,则日期将设置为前一天的日期,因此.now()永远不会介于前一天的时间范围之间。

例如,如果您在 1 月 1 日调用设置早上和晚上,则存储的日期时间将为“1 月 1 日上午 8 点”和“1 月 1 日下午 4 点”。下次您的循环检查时,它会询问“1 月 2 日上午 10 点在 1 月 1 日上午 8 点和 1 月 1 日下午 4 点之间”,当然答案是否定的,因为 1 月 1 日是前一天。

如果您只想检查时间,您可能想使用datetime.time课程而不是课程。datetime.datetime或者,您可以将晚上和早上日期时间的日期部分设置为您想要匹配的特定日期(但这无助于每周重复)。


推荐阅读