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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 07:27:04