检查时间差值是否在午夜过后

时间:2017-09-18 23:43:25

标签: python time compare timedelta

因此,如果我有两个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。所以我不能仅仅在结束时添加一天。

2 个答案:

答案 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点之间。

相关问题