You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测3个可配置时间区间重叠?跨天场景现有方法失效求方案

解决跨天时间区间重叠检测的方案

这个跨天时间区间的重叠检测问题确实挺常见的,原来的方法只适用于非跨天的理想场景,咱们换个更通用的思路来解决:

核心思路:统一时间格式+分场景判断重叠

首先把所有时间转换成当天的总分钟数(比如00:00转成0,23:59转成1439),这样能把时间变成可直接比较的数值,然后针对「跨天区间」和「非跨天区间」的不同组合,分别判断是否重叠。

1. 时间转分钟数的工具方法

先写个简单的转换逻辑(以Python为例,其他语言同理):

def time_to_minutes(time_str):
    hours, minutes = map(int, time_str.split(':'))
    return hours * 60 + minutes

比如06:00会转成360,23:00转成1380,00:00转成0,非常直观。

2. 通用的两两区间重叠检测函数

针对两个区间的所有可能组合(都不跨天、一个跨天、两个都跨天),编写判断逻辑:

def is_overlapping(start_a, end_a, start_b, end_b):
    # 判断区间是否跨天(开始时间大于结束时间)
    a_crosses_midnight = start_a > end_a
    b_crosses_midnight = start_b > end_b

    if not a_crosses_midnight and not b_crosses_midnight:
        # 情况1:两个区间都不跨天,常规重叠判断(端点重合不算重叠)
        return start_a < end_b and start_b < end_a
    elif a_crosses_midnight and not b_crosses_midnight:
        # 情况2:A跨天,B不跨天——只要B和A的任意一段(23:00-00:00前、00:00后)重叠就算
        return start_b < end_a or start_a < end_b
    elif not a_crosses_midnight and b_crosses_midnight:
        # 情况3:B跨天,A不跨天——逻辑和情况2对称
        return start_a < end_b or start_b < end_a
    else:
        # 情况4:两个都跨天,必然重叠(每个跨天区间至少覆盖12小时,两个肯定有交集)
        return True

3. 三个区间的完整检测逻辑

因为你有三个区间,只需要检查所有两两组合是否重叠即可:

# 假设三个区间的时间已经转成分钟数
interval1 = (time_to_minutes("00:00"), time_to_minutes("08:00"))
interval2 = (time_to_minutes("07:00"), time_to_minutes("19:00"))
interval3 = (time_to_minutes("18:00"), time_to_minutes("23:00"))

# 检查所有两两组合
has_overlap = is_overlapping(*interval1, *interval2) or \
              is_overlapping(*interval1, *interval3) or \
              is_overlapping(*interval2, *interval3)

if has_overlap:
    print("区间重叠,阻止修改!")
else:
    print("区间合法,允许修改!")

为什么原来的方法失效?

你之前用的Start1 < Stop3 Start2 < Stop1 Start3 < Stop2是一种「循环顺序假设」——默认三个区间按非跨天的顺序循环衔接,但一旦出现跨天区间(比如Stop3=23:00、Start1=00:00),这种顺序假设就不成立了,自然无法正确检测重叠。

而上面的方法完全不依赖顺序假设,不管区间怎么设置,都能准确判断是否重叠。

内容的提问来源于stack exchange,提问作者user1937012

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:00:46