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
相关产品推荐
相关产品推荐

