当开始时间大于结束时间时,如何确定当前时间是否在指定范围内?

时间:2014-05-15 00:26:39

标签: python python-datetime

当结束时间小于开始时间时,有没有办法检查当前时间是否在时间范围内?

我看到的所有示例和答案都是在开始时间小于结束时间的时候。例如

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)

这始终返回not in range

如果可能,我想避免做这样的事情:

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 :(得分:0)

如果您想忽略午夜时间被包裹的想法,您可以轻松地将其修复为一行。

一旦有了开始时间和结束时间,就可以使用sorted()对它们进行排序,然后返回一个新的排序列表,然后将它们重新分配给satrt和结束时间。

所以把这一行放进去就应该没事了。

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

这是一个complete working script on codepad来确认。