因此,如果我有两个timedelta值,例如21:00:00
(PM)作为开始时间,03:00:00
(AM)作为结束时间,我希望比较此范围内的23:00:00
,看看它是否落在这两者之间,没有日期值,我怎么能这样做?
因此,虽然在此示例中它会看到23:00:00
大于21:00:00
,但它不会23:00:00
小于03:00:00
,这是我的问题。我需要能够使用timedelta比较24小时圆圈的时间,或者远离timedelta的转换是好的。
注意:开始/结束时间范围可能会发生变化,因此任何一个都可能是AM / PM。所以我不能仅仅在结束时添加一天。
答案 0 :(得分:0)
您应该考虑在绝对时间内使用datetime.time
代替datetime.timedelta
。尽管如此,鉴于你现有的情况,这里应该有用。
def is_in_time_range(start, end, time):
if end < start:
return start < time or end > time
return start < time < end
from datetime import timedelta
>>> is_in_time_range(timedelta(hours=21), timedelta(hours=3), timedelta(hours=23))
True
>>> is_in_time_range(timedelta(hours=21), timedelta(hours=3), timedelta(hours=4))
False
>>> is_in_time_range(timedelta(hours=21), timedelta(hours=3), timedelta(hours=2))
True
如果你决定使用datetime.time
而不是我所建议的,这个解决方案仍然有效:
from datetime import time
>>> is_in_time_range(time(hour=21), time(hour=3), time(hour=23))
True
>>> is_in_time_range(time(hour=21), time(hour=3), time(hour=4))
False
>>> is_in_time_range(time(hour=21), time(hour=3), time(hour=2))
True
答案 1 :(得分:0)
只有当结束时间小于开始时间(IE,第二天)时才变得“困难”。但是,您可以进行测试,如果是这样的话,请为所有三个项目添加12小时,所以现在您可以轻松地测试并确认上午11点是在上午9点到下午3点之间。