我必须检测两个时间段是否重叠。 每个时期都有一个开始日期和一个结束日期。 我需要检测我的第一个时间段 (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# 代码(比如在课堂上)?
DateTime
第三:如果不是,您将采取什么方法使这种比较最快?
简单检查两个时间段是否重叠:
bool overlap = a.start < b.end && b.start < a.end;
或在您的代码中:
bool overlap = tStartA < tEndB && tStartB < tEndA;
(如果您改变主意不想说两个刚刚相互接触的时期重叠,请使用<=而不是。)<
<=
<