You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 处理时间日程区间:如何判断时间是否落在给定时段内

日程时间区间判断实现方案

需求拆解

实现逻辑可拆为两个独立的可复用模块,无需复杂嵌套:

  • 基础模块:给定HH:MM-HH:MM格式的时段字符串,判断任意时间点是否落在该区间内,输出布尔结果
  • 上层模块:结合从数据库取出的星期-时段映射字典,自动匹配当前时间对应的星期,完成整表的营业状态判断

通用时段判断函数实现

将所有时间统一换算为当日累计分钟数做数值比较,相比直接操作datetime对象的区间判断,代码更简洁、计算效率更高:

from datetime import datetime

def is_in_time_slot(slot_str: str, check_time=None) -> bool:
    # 拆分时段字符串的起止时间
    start_str, end_str = slot_str.split('-')
    
    # 内部工具:将HH:MM格式的时间字符串转为当日累计分钟数
    def _to_minute(time_str: str) -> int:
        hour, minute = map(int, time_str.split(':'))
        return hour * 60 + minute
    
    start_min = _to_minute(start_str)
    end_min = _to_minute(end_str)

    # 默认取系统当前时间作为待检查时间
    if check_time is None:
        check_time = datetime.now()
    
    # 兼容字符串格式、datetime对象格式的待检查时间输入
    if isinstance(check_time, str):
        check_min = _to_minute(check_time)
    else:
        check_min = check_time.hour * 60 + check_time.minute
    
    # 直接做数值范围匹配,返回布尔值
    return start_min <= check_min <= end_min

单时段判断示例

判断13:37是否在10:00-22:00区间内,直接调用即可:

is_in_time_slot('10:00-22:00', '13:37')  # 返回 True

结合星期日程字典的判断逻辑

针对存储的星期-时段映射字典,仅需做一次当前时间与字典键的匹配,再复用上述通用判断函数即可完成全流程判断:

# datetime.weekday() 返回值与字典键的固定映射(0=周一,6=周日)
weekday_key_map = {
    0: 'monday',
    1: 'tuesday',
    2: 'wednesday',
    3: 'thursday',
    4: 'friday',
    5: 'saturday',
    6: 'sunday'
}

def is_matching_schedule(schedule: dict, check_time=None) -> bool:
    if check_time is None:
        check_time = datetime.now()
    
    # 匹配当前时间对应的星期键
    current_week_key = weekday_key_map[check_time.weekday()]
    # 从日程字典中取出对应星期的时段字符串
    current_slot = schedule.get(current_week_key)
    
    # 未匹配到对应时段直接返回False
    if not current_slot:
        return False
    
    # 复用通用判断函数返回结果
    return is_in_time_slot(current_slot, check_time)

整表判断示例

传入从数据库JSON字段取出的标准日程字典,即可直接判断当前时间是否在营业区间内:

# 从数据库取出的原始日程结构
db_schedule = {
    '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'
}

# 执行判断
is_matching_schedule(db_schedule)

扩展说明

  • 所有时间计算基于分钟数比对,无第三方依赖,轻量化易维护
  • 函数支持手动传入指定时间点做离线校验,无需固定绑定系统当前时间
  • 后续如需支持跨天营业场景(如22:00-02:00),仅需在通用判断函数中补充跨天分支逻辑,无需修改上层日程匹配代码

内容的提问来源于stack exchange,提问作者OcMaRUS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.27 06:06:11