我有Appointment
个这样的对象:
public Appointment(string p_Title, DateTime p_Start, TimeSpan p_Lenght)
我想检查对象是否重叠,但是无论我尝试什么,我似乎都在指示同一天的每个对象中出现重叠。我将DateTime的格式设置为YYYY,MM,DD,HH:MM:SS。 TimeSpan是HH:MM:SS
答案 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
存储的显示格式。仅使用它们的字符串表示形式即可-并检查是否存在重叠的约会,您无需关心此数据如何以字符串表示-您只需关心数据本身即可。