您应该考虑在绝对时间使用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
检查diff(23,21)是否小于diff(23,3)? –
结束时间是否保证在开始时间的24小时内?否则,可能会变得复杂。如果开始时间是星期一晚上11点,结束时间是星期三凌晨3点,那么只要你在星期二上午11点左右谈论他们之间的任意时间,就说11点。如果这是一种可能性,您将需要的不仅仅是开始时间和结束时间。 –
@DavidJenkins是的,它一直会在24小时内。所以,当你选择任意时间,即下午3点,但你的范围(可能会改变)只是说上午6点到12点,这应该不在范围内。 – sgript