如何在开始时间大于结束时间的情况下判断当前时间是否在指定范围内?

0 投票
1 回答
628 浏览
提问于 2025-04-18 06:37

有没有办法检查当前时间是否在一个时间范围内,而这个时间范围的结束时间比开始时间还要早呢?

我看到的所有例子和答案都是在开始时间小于结束时间的情况下。比如说:

import datetime

start_time = datetime.time(1)
end_time = datetime.time(12)

for i in range(0,24):
    now = datetime.time(i)
    if start_time <= now <= end_time:
        print "%s in range" % now
    else:
        print "%s not in range" % now

如果now在这个范围内,它会正确返回结果。

但是这种方法在结束时间大于开始时间的情况下就不管用了。

start_time = datetime.time(22)
end_time = datetime.time(12)

这会对所有时间返回不在范围内

如果可以的话,我希望避免这样做:

if start_time < end_time:
    # do start <= now <= end comparison 
else:
    # check if now is past midnight or before midnight
    # then check against start or end time

1 个回答

0

如果你想忽略时间跨过午夜这个问题,其实只需要一行代码就能解决。

一旦你有了开始时间和结束时间,可以用 sorted() 这个函数来排序,它会返回一个新的排序好的列表,然后再把这个列表重新赋值给开始时间和结束时间。

所以只要加上这一行代码就可以了。

start_time,end_time=sorted([start_time,end_time])

这里有一个完整的可运行脚本在codepad上供你确认。

撰写回答