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

如何在C#中检查会议时间与已有日程列表的时间冲突

C# 日程时间冲突检测实现方案

刚好之前做过类似的日程管理功能,咱们来一步步解决这个时间冲突检测的问题。首先得明确:两个时间段只要不是完全错开,就属于冲突,核心逻辑搞清楚了代码就好写了。

先修正下代码里的小细节

你提到的方法里用了List<PlannedEvents>,但前面定义的实体类是ScheduledEvent,我统一用ScheduledEvent来写,避免类型不一致的问题。

完整实现代码

首先你的实体类保持不变:

public class ScheduledEvent 
{ 
    public int EventId { get; set; } 
    public DateTime StartDateTime { get; set; } 
    public DateTime EndDateTime { get; set; } 
}

然后是冲突检测方法(按C#命名规范改成了帕斯卡命名法,你要是习惯原来的写法也可以改回去):

// 假设这是你存储所有已安排日程的全局/类内列表
List<ScheduledEvent> Schedules = new List<ScheduledEvent>();

bool CheckDateTimeConflict(DateTime startDateTime, DateTime endDateTime)
{
    // 先做基础校验:不能让开始时间晚于或等于结束时间
    if (startDateTime >= endDateTime)
    {
        throw new ArgumentException("会议开始时间不能晚于或等于结束时间");
    }

    // 核心冲突判断:只要有一个已有日程和当前时间段重叠,就返回冲突
    return Schedules.Any(existingEvent => 
        startDateTime < existingEvent.EndDateTime && 
        endDateTime > existingEvent.StartDateTime);
}

冲突判断逻辑的详细说明

为什么用这个条件?咱们拆解所有可能的冲突场景:

  • 新会议完全嵌套在已有日程里:比如已有日程是7:00-10:00,新会议是8:00-9:00 → 满足startDateTime < 已有结束时间且endDateTime > 已有开始时间
  • 已有日程完全嵌套在新会议里:新会议是6:00-11:00,已有日程是8:00-9:00 → 同样满足条件
  • 新会议和已有日程部分重叠:新会议是8:00-10:00,已有日程是7:00-9:00 → 满足条件
  • 若你想把「刚好衔接」的情况也算冲突(比如新会议9:00开始,已有会议9:00结束),只需要把判断符号改成<=和>=即可

使用示例

给你写个简单的调用例子,方便你测试:

// 先模拟添加一些已有日程
Schedules.Add(new ScheduledEvent 
{ 
    EventId = 1, 
    StartDateTime = new DateTime(2022, 3, 19, 8, 0, 0), 
    EndDateTime = new DateTime(2022, 3, 19, 10, 0, 0) 
});

// 检查你指定的时间段:2022年3月19日7:00-9:00
bool hasConflict = CheckDateTimeConflict(
    new DateTime(2022, 3, 19, 7, 0, 0), 
    new DateTime(2022, 3, 19, 9, 0, 0));

Console.WriteLine(hasConflict); // 输出True,因为和已有8-10的日程重叠了

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 13:08:13