Python-计算现在的时间是否在两次之间

2024-09-24 22:18:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试寻找最干净/最具python风格的方法来评估“现在”是否介于两次之间;但是,开始/结束时间可能会(也可能不会)跨越一天的界限-例如(仅使用简单的示例):

onhour=23
onmin=30
offhour=4
offmin=15
timenow = datetime.datetime.now().time()

做一个直接的if START < NOW < END场景是行不通的!

我目前掌握的是一些代码,这些代码评估当前是否为“夜间”,如下所示:

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

如果标题听起来不像什么新的,但已经为类似的问题复习了一些现有的答案,例如:

我注意到这些似乎并不能解释开始和结束时间发生在一天范围内的情况。

除此之外,任何关于添加基于天的日程安排的想法也会非常有用!例如,“周一至周五,23:00打开,04:00关闭”-但是在任何一方都要管理一天的开关(否则,星期五会打开某些东西,但星期六不会关闭--但是,包括星期六意味着它在23点再次打开

我考虑过做一个简单的“在X点打开,在Y点睡觉”来解决这个问题。。。但如果脚本是在“On”周期中启动的,则在下次运行之前不会启动它。。。但这似乎是最简单的选择!:)

我希望有一个很棒的模块来完成这一切。。。:天

Python2.7-3.2的兼容性对我来说也很重要!


Tags: trueverbosedatetimereturniftimenowint
3条回答
def is_hour_between(start, end, now):
    is_between = False

    is_between |= start <= now <= end
    is_between |= end < start and (start <= now or now <= end)

    return is_between

测试条件:

assert is_hour_between(6, 10, 6)
assert not is_hour_between(6, 10, 4)
assert is_hour_between(17, 20, 17)
assert not is_hour_between(17, 20, 16)

要确定给定时间(无日期)是否在给定的开始时间和结束时间之间(不包括结束时间):

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

示例:

from datetime import datetime, time

print("night" if in_between(datetime.now().time(), time(23), time(4)) else "day")

你的密码有点乱。我会这样做:

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.")

相关问题 更多 >