我需要检测两个时间段是否重叠。
每个时间段都有一个开始日期和结束日期。
我需要检测我的第一个时间段(A)是否与另一个时间段(B/C)重叠。
在我的情况下,如果B的开始等于A的结束,则它们不重叠(反之亦然)。
我发现了以下情况:
所以我现在做法如下:
tStartA < tStartB && tStartB < tEndA //对于情况1
OR
tStartA < tEndB && tEndB <= tEndA //对于情况2
OR
tStartB < tStartA && tEndB > tEndA //对于情况3
(情况4在情况1或情况2中考虑)
它有效,但似乎不是非常高效。
因此,首先在C#中是否有一个现有的类可以建模(即具有固定开始日期的时间段),类似TimeSpan?
其次,是否已经有C#代码(例如DateTime类)可以处理这种情况?
第三,如果没有,你会采取什么方法使这种比较最快?
判断两个时间段是否重叠的简单方法:
bool overlap = a.start < b.end && b.start < a.end;
或者在你的代码中:
bool overlap = tStartA < tEndB && tStartB < tEndA;
(如果你改变主意,想说两个时间段只要相互接触就重叠了,请使用 <=
)