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

日程规划器:如何高效检测自定义时间与已有日程的冲突?

解决日程规划器跨时段冲突检测问题

核心思路:通用时间区间冲突判断公式

不管早、中晚的时段划分,直接用数值化的时间区间冲突逻辑,就能覆盖所有重叠场景,无需大量条件判断。

两个时间区间[A_start, A_end]和[B_start, B_end],只要满足:

A_start < B_end 且 B_start < A_end

就说明两个区间存在重叠冲突。这个公式能处理:

  • 新任务区间完全包含已有日程
  • 已有日程完全包含新任务
  • 跨时段部分重叠(比如你遇到的6:00-14:00和12:00-13:00)
  • 首尾相接的情况(如果需要判定为冲突,把<改成<=即可)

具体实现步骤

  1. 时间数值化转换:把所有时间(包括新任务和已有日程)转换成统一的数值单位,比如分钟数(6:00 → 6×60=360,14:00→14×60=840),避免字符串比较的麻烦。
  2. 合并所有日程:把早、中、晚三个列表的所有日程,统一提取成(开始分钟数, 结束分钟数)的格式,放到一个总列表里。
  3. 遍历冲突检测:用上面的公式逐一对比新任务和已有日程,只要有一个满足条件,就判定冲突。

代码示例(Python)

# 模拟三个时段的已有日程,统一转成分钟数
morning_schedules = [(300, 720)]  # 5:00-12:00
noon_schedules = [(720, 780), (840, 900)]  # 12:00-13:00、14:00-15:00
evening_schedules = [(1080, 1320)]  # 18:00-22:00

# 合并所有日程到总列表
all_schedules = morning_schedules + noon_schedules + evening_schedules

def check_conflict(new_start_min, new_end_min):
    for s_start, s_end in all_schedules:
        if new_start_min < s_end and s_start < new_end_min:
            return True
    return False

# 测试你的案例:6:00-14:00 → 360到840分钟
print(check_conflict(360, 840))  # 输出True,成功检测到冲突

为什么之前的方法失效?

  • 按开始时间选列表检查:6:00属于早时段,只会检查早列表,漏掉了中时段的12:00-13:00。
  • 合并列表但冲突逻辑错误:如果只判断新任务的开始/结束在已有区间内,会漏掉“新任务包含已有日程”的场景(比如你的案例),而通用公式能覆盖所有重叠情况。

优化方向(可选)

如果日程数量较多,可先将所有已有日程按开始时间排序,然后用二分查找快速定位可能冲突的区间,减少遍历次数,提升检测效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 07:33:11