【问题标题】:Check for Date overlapping where end date might be null检查结束日期可能为空的日期重叠
【发布时间】:2018-08-01 09:19:40
【问题描述】:

我目前正在尝试检查结束日期可能为空的日期是否重叠。使用我当前的代码,如果发生场景 1,我可以显示冲突消息。但是,我无法显示方案 2 的冲突消息。例如,

场景 1:结束日期不为空

2018 年 1 月 7 日至 2018 年 1 月 9 日

2018 年 1 月 6 日至 2018 年 1 月 9 日

结果:有冲突

场景 2:结束日期为空

2018 年 1 月 7 日为空

2018 年 1 月 6 日至 2018 年 1 月 9 日

结果:有冲突

这是我的代码:

if ((A.StartDate < B.EndDate) && 
    (B.StartDate < A.EndDate)) {
   Console.WriteLine("Conflict");
}

【问题讨论】:

  • 您只需要在尝试使用它之前检查 enddate 是否为空。如果它为空,则将其替换为一些名义值(例如,适当的 MaxDate 或 MinDate),这将允许 if 语句中的比较得出正确的结论。

标签: c# datetime overlap


【解决方案1】:

假设 EndDate 为 null 本质上是“没有结束日期”,所以任何日期总是在此之前。

您可以使用 null 对象模式,将 null 替换为合适的始终匹配的实例(最简单的方法是使用 null-coalescing operator)。

var ed = A.EndDate ?? DateTime.MaxValue;

if (theDate < ed) {
  // We're in range
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-31
  • 2023-03-22
相关资源
最近更新 更多