Python是否有处理纯时间区间的库?判断给定时间是否命中区间
纯时间区间的命中判断实现
以下是完全基于datetime.time对象的区间判断工具实现,符合你要求的使用方式,无需依赖pandas的timestamp:
实现代码(lib.py)
import datetime class Interval: def __init__(self, **kwargs): # 将传入的HH:MM:SS格式字符串解析为datetime.time对象 self.from_time = datetime.datetime.strptime(kwargs["from"], "%H:%M:%S").time() self.till_time = datetime.datetime.strptime(kwargs["till"], "%H:%M:%S").time() def hits_interval(time: datetime.time, interval: Interval) -> bool: from_t = interval.from_time till_t = interval.till_time if from_t <= till_t: # 非跨天区间:判断时间是否在[起始, 结束]范围内 return from_t <= time <= till_t else: # 跨天区间:时间大于等于起始 或 小于等于结束 return time >= from_t or time <= till_t
使用示例
import datetime import lib # 定义待判断的纯时间 my_time = datetime.time(hour=7, minute=7, second=7) # 定义时间区间(01:02:03 到 03:02:01) my_interval = lib.Interval(from="01:02:03", till="03:02:01") # 输出判断结果:7:07不在1:02-3:02区间内,所以输出False print(lib.hits_interval(time=my_time, interval=my_interval))
关键逻辑说明
- Interval类:通过关键字参数接收
from和till时间字符串,自动转换为datetime.time对象存储,避免重复解析。 - 跨天区间处理:如果区间起始时间晚于结束时间(比如
from="23:00:00", till="01:00:00"),会自动判定为跨午夜区间,此时只要时间落在起始到23:59:59,或00:00:00到结束范围内,都会返回True。
跨天区间测试示例
# 定义跨天区间:23:00到次日01:00 cross_interval = lib.Interval(from="23:00:00", till="01:00:00") test_time1 = datetime.time(23, 30) print(lib.hits_interval(test_time1, cross_interval)) # 输出True test_time2 = datetime.time(0, 30) print(lib.hits_interval(test_time2, cross_interval)) # 输出True test_time3 = datetime.time(12, 0) print(lib.hits_interval(test_time3, cross_interval)) # 输出False
内容的提问来源于stack exchange,提问作者Dimon Agon
相关产品推荐
相关产品推荐

