c#中的Timespan交叉点

假设我有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中有一种优雅的方法吗?

UPDATE

我使用了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  iRange.To) iRange = null; return iRange; } 

也许是这样的事情?

 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

简单的方法是从开始时间范围2中扣除范围1的开始时间。如果时间范围> 0,则选择范围1开始作为开始日期。

对范围的结束日期执行相同的操作。 但如果时间跨度> 0,则选择范围2的结束日期。

如果两者都是有效范围,则比较结果。 即开始<结束。 否则没有有效范围。