给定两个日期范围,确定两个日期范围是否重叠的最简单或最有效的方法是什么?
举个例子,假设我们有通过日期时间变量表示的范围StartDate1来EndDate1 和 StartDate2到EndDate2.
我有四个DateTime对象.A1,A2和B1,B2.
我需要知道A1-A2期间与期间B1-B2不相交.但我不想编写脏代码,就像许多块一样.
if (A1 < B1 && A2 > B1)
{
return false;
}
Run Code Online (Sandbox Code Playgroud)
....等
EDITED
我尝试使用这个:比较范围
DateTime A1 = DateTime.MinValue.AddMinutes(61);
DateTime A2 = DateTime.MinValue.AddHours(1.2);
DateTime B1 = DateTime.MinValue.AddMinutes(5);
DateTime B2 = DateTime.MinValue.AddHours(1);
Console.WriteLine(Range.Overlap(
new Range<DateTime>(A1, A2),
new Range<DateTime>(B1, B2)
));
Run Code Online (Sandbox Code Playgroud)
它返回true但我预计会错误.因为此代码始终返回true
if (left.Start.CompareTo(left.Start) == 0)
{
return true;
}
Run Code Online (Sandbox Code Playgroud) 要检查重叠,在两个不同的dateranges,{Start1, End1}和{Start2, End2}我检查:
if ((Start1 <= End2) && (End1 >= Start2))
{
//overlap exists
}
Run Code Online (Sandbox Code Playgroud)
问题是,如果让我说五个日期范围,有
什么比较重叠的好方法?.
检查它们中的任何一个是否相互重叠?
如果我有多个日期范围,如何查找这些范围是否重叠?
我有一个事件列表,现在我想找出哪些事件重叠.您可以在下面找到我目前拥有的代码,但我遇到的问题是,搜索到的项目也包含在列表中.
List<SomeEventObject> overlappingEvents = new List<SomeEventObject>();
foreach (SomeEventObject eventItem in EventList)
{
bool overlapping = false;
foreach (SomeEventObject anotherEventItem in EventList)
{
if (eventItem.StartDate <= anotherEventItem.EndDate &&
eventItem.EndDate >= anotherEventItem.StartDate)
{
overlapping = true;
overlappingEvents.Add(anotherEventItem);
}
}
if (overlapping)
overlappingEvents.Add(eventItem);
}
Run Code Online (Sandbox Code Playgroud)
我需要创建一个没有搜索项目的新列表.因此我问是否有一个很好的LINQ表达式可以为我处理.这是我想到的一些伪代码:
EventList.Where(e =>
eventItem.StartDate <= e.EndDate &&
eventItem.EndDate >= e.StartDate);
Run Code Online (Sandbox Code Playgroud)
在这种情况下,eventItem当然不存在.
结果我认为我需要两个列表:一个具有重叠事件,一个具有非重叠事件.但.Except()如果我有重叠的事件列表,这应该是可能的.
编辑:
我创建了一个dotnetfiddle,以便人们可以玩它.一个重要的问题是重叠算法.
活动1:
StartDate:今天,10
:00 EndDate:今天,10:05
事件2:
StartDate:今天,10
:05 EndDate:今天,10:10
如果您向用户提供此信息,则不会重叠.所以我要修改我的算法.
我有两组范围,每个范围是一对指示开始和结束的整数.确定两个范围之间是否存在重叠的最快方法是什么?
谢谢.
我试图找出正确的算法来计算一组日期范围时遇到问题.
基本上我有一个无序日期范围列表(列表包含开始和结束时间的数组),我想合并这个列表,因此它不包含重叠时间.
主要是为了巩固两个日期范围:
if start1 <= end2 and start2 <= end1 //Indicates overlap
if start2 < start1 //put the smallest time in start1
start1 = start2
endif
if end2 > end1 //put the highest time in end1
end1 = end2
endif
endif
Run Code Online (Sandbox Code Playgroud)
这加入了两个日期时间.
在迭代所有值时,我遇到了绊脚石,因此结束列表只包含不重叠的值.
我的功能和递归编程有点生疏,欢迎任何帮助.
language-agnostic algorithm recursion functional-programming
我试图找到一种优雅的算法来检查两个年度重复周期是否重叠。该期间与年份无关,但可以预期一年始终是闰年。
例如,期间 A =(3 月 1 日至 5 月 1 日)和期间 B =(4 月 1 日至 9 月 1 日)重叠。此外,期间 A =(10 月 1 日至 2 月 1 日)和期间 B =(1 月 1 日至 3 月 1 日)重叠。
然而,我发现这比我预期的要困难得多。复杂性来自跨越年底的时期。
我有一个doesOverlap(A,B)可行的解决方案(请参阅下面的方法),但我发现它很混乱。
# for the rest of the MWE context code, see further
# WORKING, but a bit convulted
def doesOverlap(A, B):
'''returns True if yearly period A and B have overlapping dates'''
# list to track if day in …Run Code Online (Sandbox Code Playgroud) 我正在寻找一个间隔树C#集合类.
我需要能够添加间隔,理想2D,否则我可以组合两个标准1D间隔树.
我还需要能够找出与给定间隔重叠的间隔.
我发现这个intervaltree.codeplex.com但是
没有与此版本相关的下载.
编辑:
继续这里:C#使用其他代码