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

如何用C#实现预约时间与假期时段的冲突校验?

C# 预约与假期时段重叠校验的正确实现方案

核心重叠判断逻辑

要判断预约时段与假期时段是否重叠,核心逻辑是:两个时间段只要不是完全错开,就属于重叠。

对于两个时间段 [aptStart, aptEnd] 和 [holidayStart, holidayEnd],唯一的两种不重叠情况是:

  1. 预约完全在假期结束之后:aptStart >= holidayEnd
  2. 预约完全在假期开始之前:aptEnd <= holidayStart

反过来,只要不满足上述任意一种情况,两个时段就存在重叠。

修正后的代码实现

假设我们定义如下假期数据模型:

public class Holiday
{
    public DateTime StartTime { get; set; }
    public DateTime EndTime { get; set; }
}

下面是修正后的CheckDoctorAvailability方法,遍历所有假期记录并校验重叠情况:

public bool CheckDoctorAvailability(DateTime aptStartDate, DateTime aptEndDate, List<Holiday> holidays)
{
    foreach (var holiday in holidays)
    {
        // 反向判断:只要不是完全错开,就是重叠
        bool isOverlapping = !(aptStartDate >= holiday.EndTime || aptEndDate <= holiday.StartTime);
        
        if (isOverlapping)
        {
            // 存在重叠,返回不可用
            return false;
        }
    }
    
    // 无重叠,返回可用
    return true;
}

针对测试场景的验证

你的测试场景:

  • 预约时段:2022-11-10 12:41:00 至 2022-11-10 15:41:00
  • 11月10日假期时段:2022-11-10 12:00:00 至 2022-11-10 13:00:00

代入逻辑判断:

  • aptStartDate (12:41) >= holiday.EndTime (13:00) → false
  • aptEndDate (15:41) <= holiday.StartTime (12:00) → false
  • 因此isOverlapping = !false → true,方法返回false,符合预期(无法创建预约)

常见错误逻辑分析

很多开发者容易写出不完整的判断,比如仅检查:

  • 预约开始时间在假期范围内
  • 或者预约结束时间在假期范围内

这种写法会漏掉预约时段完全包含假期、假期完全包含预约的场景,而反向判断逻辑可以覆盖所有重叠情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 03:40:34