检测重叠时间段的算法
我必须检测两个时间段是否重叠。每个期间都有一个开始日期和一个结束日期。
我需要检测我的第一个时间段(A)是否与另一个时间(B / C)重叠。
在我的情况下,如果B的开头等于A的结尾,则它们不重叠(也为反),我发现以下情况:
所以实际上我是这样做的:
tStartA < tStartB && tStartB < tEndA //For case 1OR
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;
(如果您改变主意要说两个 彼此接触的时间段重叠,请使用<=
而不是。)<
以上是 检测重叠时间段的算法 的全部内容, 来源链接: utcz.com/qa/411816.html