一尘不染

检测重叠时间段的算法

algorithm

我必须检测两个时间段是否重叠。每个期间都有一个开始日期和一个结束日期。
我需要检测我的第一个时间段(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该类中的代码)可以
处理此问题?

第三:如果没有,您将如何使此比较最快


阅读 470

收藏
2020-07-28

共1个答案

一尘不染

简单检查一下两个时间段是否重叠:

bool overlap = a.start < b.end && b.start < a.end;

或在您的代码中:

bool overlap = tStartA < tEndB && tStartB < tEndA;

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

2020-07-28