检测重叠时间段的算法

我必须检测两个时间段是否重叠。每个期间都有一个开始日期和一个结束日期。

我需要检测我的第一个时间段(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;

(如果您改变主意要说两个 彼此接触的时间段重叠,请使用<=而不是。)<

以上是 检测重叠时间段的算法 的全部内容, 来源链接: utcz.com/qa/411816.html

回到顶部