检测重叠时间段的算法 [重复]

发布时间 2023-11-15 12:56:55作者: 小满独家

内容来自 DOC https://q.houxu6.top/?s=检测重叠时间段的算法 [重复]

我需要检测两个时间段是否重叠。

每个时间段都有一个开始日期和结束日期。

我需要检测我的第一个时间段(A)是否与另一个时间段(B/C)重叠。

在我的情况下,如果B的开始等于A的结束,则它们不重叠(反之亦然)。

我发现了以下情况:

enter image description here

所以我现在做法如下:

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;

(如果你改变主意,想说两个时间段只要相互接触就重叠了,请使用 <=