Python 3如何判断hh:mm格式的指定时间是否落在给定时间范围内
时间区间判断Python实现方案
不需要额外安装第三方工具包,Python标准库自带的datetime模块就能满足需求,实现逻辑非常简单:
基础实现(相同时区、无跨时区需求)
直接将时间字符串解析为time对象做大小比较即可,同时兼容跨午夜的区间场景:
from datetime import datetime def is_time_in_range(check_time: str, start: str, end: str, fmt: str = "%I:%M %p") -> bool: # 按指定格式解析时间,仅保留时分信息 check = datetime.strptime(check_time, fmt).time() start_t = datetime.strptime(start, fmt).time() end_t = datetime.strptime(end, fmt).time() # 区分普通区间和跨午夜区间 return start_t <= check <= end_t if start_t <= end_t else check >= start_t or check <= end_t # 示例测试 print(is_time_in_range("10:30 AM", "10:00 AM", "11:00 AM")) # 返回True
参数说明
fmt为时间格式模板,如果你用的是24小时制的hh:mm格式,把fmt改为%H:%M即可- 自动适配
23:00到02:00这类跨午夜的区间判断
带时区适配实现(适配IST等指定时区)
如果需要处理带时区标识的时间,Python3.9及以上版本可以用标准库的zoneinfo模块对齐时区:
from datetime import datetime from zoneinfo import ZoneInfo # 指定IST时区(这里为印度标准时间,如有其他时区需求替换对应标识即可) IST = ZoneInfo("Asia/Kolkata") def is_tz_time_in_range(check_time: str, start: str, end: str, check_fmt: str = "%I:%M %p %Z", range_fmt: str = "%I:%M %p") -> bool: check = datetime.strptime(check_time, check_fmt).replace(tzinfo=IST).time() start_t = datetime.strptime(start, range_fmt).replace(tzinfo=IST).time() end_t = datetime.strptime(end, range_fmt).replace(tzinfo=IST).time() return start_t <= check <= end_t if start_t <= end_t else check >= start_t or check <= end_t # 示例测试 print(is_tz_time_in_range("10:30 AM IST", "10:00 AM", "11:00 AM")) # 返回True
补充说明
如果有更复杂的时间计算需求,可以选择第三方库pendulum,API设计比原生datetime更友好,但这个简单场景下原生标准库完全足够,不需要额外安装依赖。
内容的提问来源于stack exchange,提问作者Primph
相关产品推荐
相关产品推荐

