You need to enable JavaScript to run this app. C#中如何比较两个Period对象的日期 判断新时段是否无重叠可新增
优惠活动
大模型
产品
解决方案
定价
更多

C#中如何比较两个Period对象的日期 判断新时段是否无重叠可新增

时间段不重叠判断方案

首先基于你定义的Period类:

class Period {
   public DateTime Start { get; set; }
   public DateTime End { get; set; } 
}

核心判断逻辑

判断两个时段无重叠等价于新时段完全落在已有时段的左侧,或者完全落在已有时段的右侧,对应的布尔表达式为:

// 无重叠返回true,有重叠返回false
bool IsNotOverlap(Period existing, Period newPeriod)
{
    // 新时段完全在已有时段之前 或 完全在已有时段之后
    return newPeriod.End <= existing.Start || newPeriod.Start >= existing.End;
}

注:如果你的业务定义中「前一个时段的结束日和后一个时段的开始日为同一天」算重叠,只需要把上面的<=改成<、>=改成>即可。

逻辑验证

我们用你给出的已有时段(2022-12-18 至 2023-01-11)作为existing参数,逐一验证测试场景:

  • 新时段2022-12-19 至 2023-01-10:既不满足End<=2022-12-18,也不满足Start>=2023-01-11,返回false(不可新增,符合预期)
  • 新时段2022-12-19 至 2023-01-12:同上,返回false(不可新增,符合预期)
  • 新时段2022-12-17 至 2023-01-12:同上,返回false(不可新增,符合预期)
  • 新时段2022-12-16 至 2022-12-17:满足End<=2022-12-18,返回true(可新增,符合预期)

等价写法

你也可以用反逻辑先判断重叠,再取反得到无重叠的结果,两种写法完全等价:

bool IsOverlap(Period existing, Period newPeriod)
{
    return newPeriod.Start < existing.End && newPeriod.End > existing.Start;
}
// 无重叠允许新增的判断
bool allowAdd = !IsOverlap(periodInDb, newPeriod);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 23:15:02