dal*_*ard 6 python schedule scheduled-tasks python-2.7 python-3.x
我试图找到最干净/最pythonic的方式来评估"现在"是否介于两次之间; 然而; 开始/结束时间可能会或可能不会落在一天的边界 - 例如(仅使用简单示例):
onhour=23
onmin=30
offhour=4
offmin=15
timenow = datetime.datetime.now().time()
Run Code Online (Sandbox Code Playgroud)
做一个直接的if START < NOW < END场景不适用于此!
我目前所拥有的是一些代码,用于评估当前是否为"NightTime",如下所示:
def check_time(timenow, onhour, onmin, offhour, offmin, verbose):
now = datetime.datetime.now()
now_time = now.time()
# If we're actually scheduling at night:
if int(offhour) < int(onhour):
# Check to see if we're in daylight times (ie. off schedule)
if datetime.time(int(offhour),int(offmin)) <= now_time <= datetime.time(int(onhour),int(onmin)):
if verbose == True:
print("Day Time detected.")
return False
else:
if verbose == True:
print("Night Time detected.")
return True
else:
if datetime.time(int(onhour),int(onmin)) <= now_time <= datetime.time(int(offhour),int(offmin)):
if verbose == True:
print("Night Time detected.")
return True
else:
if verbose == True:
print("Day Time detected.")
return False
Run Code Online (Sandbox Code Playgroud)
如果标题看起来不像什么新东西,但是已经审查了类似问题的一些现有答案,例如:
我注意到这些似乎并不考虑开始和结束时间超过一天边界的情况.
除此之外; 任何有关添加基于日期的日程安排的想法都会非常有用!即."对于周一至周五,在凌晨4点开始,在凌晨4点关闭" - 但是在任何一方都可以打开和关闭一天(否则;星期五将会打开一些东西,但星期六不会关闭 - 但是,包括星期六意味着它会在23点重新开启!...)
我已经考虑过做一个简单的"在X上打开,为Y睡觉"以解决这个问题......但如果脚本在"开启"周期内启动,则在下次运行之前不会启动它.但它似乎是最简单的选择!:)
我希望有一些很棒的模块可以做到这一切......:D
兼容Python2.7 - 3.2对我来说也很重要!
jfs*_*jfs 10
要确定在给定的开始时间,结束时间(不包括结尾)之间是否存在给定时间(无日期):
def in_between(now, start, end):
if start <= end:
return start <= now < end
else: # over midnight e.g., 23:30-04:15
return start <= now or now < end
Run Code Online (Sandbox Code Playgroud)
例:
from datetime import datetime, time
print("night" if in_between(datetime.now().time(), time(23), time(4)) else "day")
Run Code Online (Sandbox Code Playgroud)
你的代码有点乱。我会做这样的事情:
import datetime
DAY, NIGHT = 1, 2
def check_time(time_to_check, on_time, off_time):
if on_time > off_time:
if time_to_check > on_time or time_to_check < off_time:
return NIGHT, True
elif on_time < off_time:
if time_to_check > on_time and time_to_check < off_time:
return DAY, True
elif time_to_check == on_time:
return None, True
return None, False
on_time = datetime.time(23,30)
off_time = datetime.time(4,15)
timenow = datetime.datetime.now().time()
current_time = datetime.datetime.now().time()
when, matching = check_time(current_time, on_time, off_time)
if matching:
if when == NIGHT:
print("Night Time detected.")
elif when == DAY:
print("Day Time detected.")
Run Code Online (Sandbox Code Playgroud)