假设我有2个日期范围。
这些日期范围可以表示为时间跨度。
我想找到一个日期范围,该范围在两个时间范围内。
Range 1: 2/1/2011 - 8/1/2011 (timespan of 6 months)
Range 2: 5/2/2011 - 5/28/2011 (timespan of 26 days)
所以在这种情况下,交叉点将是5/2 / 2011-5 / 28/2011,但是范围可以向任一方向移动(或者根本不相交,在这种情况下我希望得到的时间跨度为是0长度)
最后,我需要生成的交叉时间跨度的开始/结束的日历日期(不仅仅是滴答/小时/天等)
在c#3.0中有一种优雅的方法吗?
更新
我使用了StriplingWarriors代码并创建了一个方法..
private static DateRange GetIntersectionRange(DateRange range1, DateRange range2) {
var iRange = new DateRange();
iRange.From = range1.From < range2.From ? range2.From : range1.From;
iRange.To = range1.To < range2.To ? range1.To : range2.To;
if (iRange.From > iRange.To) iRange = null;
return iRange;
}
答案 0 :(得分:11)
也许是这样的事情?
var range1 = new{start = DateTime.Parse("2/1/2011"), end = DateTime.Parse("8/1/2011")};
var range2 = new{start = DateTime.Parse("5/2/2011"), end = DateTime.Parse("5/28/2011")};
var iStart = range1.start < range2.start ? range2.start : range1.start;
var iEnd = range1.end < range2.end ? range1.end : range2.end;
var newRange = iStart < iEnd ? new{start = iStart, end = iEnd} : null;
如果没有相交的时间段,则应返回null
。
答案 1 :(得分:0)
简单的方法是从范围2的开始时间中扣除范围1的开始时间。如果时间跨度> 0然后选择范围1开始作为开始日期。
对范围的结束日期执行相同操作。但是如果时间跨度是> 0然后选择范围2的结束日期。
然后比较结果,如果两者都是有效范围。即开始&lt;结束。否则没有有效范围。