我要检测两个时间段是否重叠.
每个期间都有开始日期和结束日期.
我需要检测我的第一个时间段(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
Run Code Online (Sandbox Code Playgroud)
(案例4在案例1或案例2中被记入帐户)
它有效,但似乎效率不高.
所以,首先在c#中有一个现有的类可以对此进行建模(一个时间段),类似于时间跨度,但具有固定的开始日期.
其次:是否已经有ac#代码(比如在DateTime类中)可以处理这个问题?
第三:如果不是,那么你最快速地进行这种比较的方法是什么?
给定两个包含整数范围[x1:x2]和[y1:y2],其中x1≤x2和y1≤y2,测试两个范围是否有任何重叠的最有效方法是什么?
一个简单的实现如下:
bool testOverlap(int x1, int x2, int y1, int y2) {
return (x1 >= y1 && x1 <= y2) ||
(x2 >= y1 && x2 <= y2) ||
(y1 >= x1 && y1 <= x2) ||
(y2 >= x1 && y2 <= x2);
}
Run Code Online (Sandbox Code Playgroud)
但我希望有更有效的方法来计算它.
在最少的操作方面,哪种方法最有效.
.net ×1
algorithm ×1
c# ×1
comparison ×1
datetime ×1
integer ×1
performance ×1
range ×1
time ×1