我必须检测两个时间段是否重叠。每个期间都有一个开始日期和一个结束日期。 我需要检测我的第一个时间段(A)是否与另一个时间(B / C)重叠。 在我的情况下,如果B的开头等于A的结尾,则它们不重叠(也为反),我发现以下情况:
所以实际上我是这样做的:
tStartA < tStartB && tStartB < tEndA //For case 1 OR tStartA < tEndB && tEndB <= tEndA //For case 2 OR tStartB < tStartA && tEndB > tEndA //For case 3
(在情况1或情况2中将情况4计入帐户)
它可以工作,但似乎效率不高。
因此,首先在c#中存在一个可以对此建模的模型(一个时间 段),类似于时间跨度,但是具有固定的开始日期。
其次:是否已经有ac#代码(如DateTime该类中的代码)可以 处理此问题?
第三:如果没有,您将如何使此比较最快 ?
简单检查一下两个时间段是否重叠:
bool overlap = a.start < b.end && b.start < a.end;
或在您的代码中:
bool overlap = tStartA < tEndB && tStartB < tEndA;
(如果您改变主意要说两个 彼此接触的时间段重叠,请使用<=而不是。)<
<=
<