python:使用时间表间隔的最佳方式:在或之间

python: best way to work with time schedule intervals: in or between

我从 DB json 字段中获取时间表,格式为:

{'monday': '10:00-22:00', 'tuesday': '10:00-22:00', 'wednesday': '10:00-22:00', 'thursday': '10:00-22:00', 'friday': '10:00-22:00', 'saturday': '10:00-22:00', 'sunday': '10:00-22:00'}

真的相信,有一种简单的方法可以检查当前时间是否在时间间隔内,并根据时间表返回结果 TRUE 或 FALSE。 即使我得到了星期几的时间:10:00-22:00,有没有办法检查 13:37 是否在间隔内?

您可以使用日期时间对象。

import datetime

DATA = {'monday': '10:00-22:00', 'tuesday': '10:00-22:00', 'wednesday': '10:00-22:00', 'thursday': '10:00-22:00', 'friday': '10:00-22:00', 'saturday': '10:00-22:00', 'sunday': '10:00-22:00'}


def is_in_time_frame(day, time):
    time_frame = DATA[day]
    start, end = map(lambda x: datetime.datetime.strptime(x, "%H:%M").time(),
                     time_frame.split('-'))
    return start <= time <= end


print(is_in_time_frame('monday', datetime.time(hour=9, minute=0)))
print(is_in_time_frame('monday', datetime.time(hour=11, minute=0)))

如果你打算经常使用它,你可以实现一个 class TimeInterval,如下所示:

import datetime

DATA = {'monday': '10:00-22:00', 'tuesday': '10:00-22:00', 'wednesday': '10:00-22:00', 'thursday': '10:00-22:00',
        'friday': '10:00-22:00', 'saturday': '10:00-22:00', 'sunday': '10:00-22:00'}


class TimeInterval:
    def __init__(self, start: datetime.time, end: datetime.time):
        self.start = start
        self.end = end

    def __contains__(self, item: datetime.time):
        return self.start <= item <= self.end


def is_in_time_frame(day, time):
    time_frame = TimeInterval(*map(lambda x: datetime.datetime.strptime(x, "%H:%M").time(),
                                   DATA[day].split('-')))
    return time in time_frame


print(is_in_time_frame('monday', datetime.time(hour=9, minute=0)))
print(is_in_time_frame('monday', datetime.time(hour=11, minute=0)))