检查DateTime + TimeSpan之间是否重叠

时间:2018-12-07 18:29:09

标签: c# datetime

我有Appointment个这样的对象:

public Appointment(string p_Title, DateTime p_Start, TimeSpan p_Lenght)

我想检查对象是否重叠,但是无论我尝试什么,我似乎都在指示同一天的每个对象中出现重叠。我将DateTime的格式设置为YYYY,MM,DD,HH:MM:SS。 TimeSpan是HH:MM:SS

1 个答案:

答案 0 :(得分:2)

  

我有Appointment个这样的对象:
  public Appointment(string p_Title, DateTime p_Start, TimeSpan p_Lenght)

因此,每个约会的开始都是DateTime,长度是TimeSpan
通过这两个参数,您可以使用p_Length的{​​{3}}方法,通过将p_Start值添加到DateTime值来轻松地计算约会的结束,如下所示:< / p>

var end = p_Start.Add(p_Length);

计算完后,每个约会都有两个DateTime值,因此很容易计算两个约会是否重叠-您只需测试一个约会是否在另一个约会之前开始,而另一个约会是否在另一个约会之前开始?结束(请注意,无论所测试的数据类型如何,这都是正确的,有关详细信息,请参见Add)-像这样:

bool AreOverlapping(Appointment a, Appointment b)
{
    return a.Start < b.Start.Add(b.Length) &&
           b.Start < a.Start.Add(a.Length)
}

如果您将一个在13:00结束的约会与另一个在13:00开始的约会重叠,则只需将<更改为<=

  

我将DateTime的格式设置为YYYY,MM,DD,HH:MM:SS。 TimeSpan是HH:MM:SS

既不是DateTime也不是TimeSpan存储的显示格式。仅使用它们的字符串表示形式即可-并检查是否存在重叠的约会,您无需关心此数据如何以字符串表示-您只需关心数据本身即可。