Python - 如果现在时间介于两次之间,则计算出来

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)


sme*_*eso 7

你的代码有点乱。我会做这样的事情:

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)