【问题标题】:How to compare two period dates in C#? [duplicate]如何比较 C# 中的两个期间日期? [复制]
【发布时间】:2021-07-28 15:47:16
【问题描述】:
class Period {
   public DateTime Start { get; set; }
   public DateTime End { get; set; } 
}

我在比较两个 Period 对象的布尔逻辑方面遇到困难

假设在 DB 中我有以下 Period 对象。

var periodInDb = new Period { 
   Start = DateTime.ParseExact("2022-12-18", "yyyy-MM-dd", CultureInfo.InvariantCulture);
   End = DateTime.ParseExact("2023-01-11", "yyyy-MM-dd", CultureInfo.InvariantCulture);
};

我只想添加一个不在上述期间之间的新期间。

我在纸上写了一些可能会添加的场景日期,我可能错过了一些场景:

开始:2022/12/18
结束:2023/01/11

一些场景日期:

开始:2022/12/19 ✔️
结束:2023/01/10 ❌
------------------
❌不要添加,因为end date介于2022/12/18 - 2023/01/11之间


开始:2022/12/19 ✔️
结束:2023/01/12 ✔️
------------------
❌不要添加,因为start date介于2022/12/18 - 2023/01/11之间


开始:2022/12/17 ✔️
结束:2023/01/12 ✔️
------------------
❌ 不要添加,因为start date and end date 的一部分不在2022/12/18 - 2023/01/11 范围内

开始:2022/12/16 ✔️
结束:2023/12/17 ✔️
------------------
✔️ 添加因为start date and end date 不在2022/12/18 - 2023/01/11 范围内

我如何知道一个时期是否在另一个时期之外?

【问题讨论】:

标签: c# datetime boolean-logic


【解决方案1】:
public bool HasOverlap(Period p1, Period p2)
{
    return p1.End >= p2.Start && p1.Start <= p2.End;
}

【讨论】:

  • 这个。请注意,根据 OP 的规范,不等式可能很严格,但这里的逻辑很好
猜你喜欢
  • 2013-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-22
相关资源
最近更新 更多