如何让while循环在02:20:00至21:49:59的时间区间内运行?
修正时间区间判断的布尔表达式
你的代码逻辑错误在于对时间区间的拆分逻辑,正确的判断需要分别处理小时跨域和同小时内的分钟条件:
错误原因分析
- 原起始条件
now.hour >= 2 and now.minute >= 20:会错误排除3:00-3:19这类时间(小时符合但分钟不足20),但这些时间本应在区间内。 - 原结束条件
now.hour <= 21 and now.minute <= 49:会错误排除17:50这类时间(小时符合但分钟超过49),但这些时间本应在区间内。
正确的布尔表达式
要判断当前时间处于02:20:00到21:49:59之间,应该用以下逻辑:
(now.hour > 2 or (now.hour == 2 and now.minute >= 20)) and (now.hour < 21 or (now.hour == 21 and now.minute <= 49))
- 起始判断:要么小时大于2(所有3点及以后的时间),要么小时等于2且分钟≥20(2点20分及之后的时间)
- 结束判断:要么小时小于21(所有20点及以前的时间),要么小时等于21且分钟≤49(21点到21点49分的时间)
修正后的代码
另外建议在内层循环中加入短暂延迟,避免CPU占用过高:
import datetime import time while True: now = datetime.datetime.now() # 判断是否在目标时间区间内 in_time_window = (now.hour > 2 or (now.hour == 2 and now.minute >= 20)) and (now.hour < 21 or (now.hour == 21 and now.minute <= 49)) print(in_time_window) while in_time_window: # 这里可以加入你需要执行的逻辑 now = datetime.datetime.now() in_time_window = (now.hour > 2 or (now.hour == 2 and now.minute >= 20)) and (now.hour < 21 or (now.hour == 21 and now.minute <= 49)) time.sleep(1) # 每秒更新一次时间,减少CPU消耗
内容的提问来源于stack exchange,提问作者Jakub Szurlej
相关产品推荐
相关产品推荐

