小编典典

检测重叠周期的算法

all

我必须检测两个时间段是否重叠。
每个时期都有一个开始日期和一个结束日期。
我需要检测我的第一个时间段 (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

(案例4在案例1或案例2中被记入账户)

有效,但似乎效率不高。

因此,首先在 c# 中有一个现有的类可以对此(一个时间段)进行建模,类似于时间跨度,但具有固定的开始日期。

DateTime其次:是否已经有可以处理这个问题的 ac# 代码(比如在课堂上)?

第三:如果不是,您将采取什么方法使这种比较最快?


阅读 79

收藏
2022-03-11

共1个答案

小编典典

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

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

或在您的代码中:

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

(如果您改变主意不想说两个刚刚相互接触的时期重叠,请使用<=而不是。)<

2022-03-11