2011-07-26 19 views
6

私は2つの日付範囲を持っているとしましょう。cでの時差交差#

これらの日付範囲は、時間範囲として表すことができます。

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/2011分の28になるが、範囲は、いずれかの方向に移動(または私はしたいと思います。その場合には全く交差しませんでした結果のタイムスパンは、長さ0)最後に

であることを、私は結果の交差点の期間の開始/終了のカレンダーの日付(だけでなく、ダニ/時間/日など)

をエレガントな方法がある必要がありますC#3.0でこれを行うには?

UPDATE

私はおそらく、

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

範囲の開始日/終了日、またはその長さを知る必要がありますか? –

答えて

10

...このような何かをStriplingWarriorsコードを取って、そこからメソッドを作成?

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を返します。

+0

それは十分に簡潔です、ありがとう:) –

0

簡単な方法は、範囲1の開始時間と範囲2の開始時間を差し引くことです。時間間隔> 0の場合、範囲1を開始日として開始を選択します。

範囲の終了日に同じ操作を行います。しかし、時間間隔が> 0の場合は、範囲2の終了日を選択してください。

次に、両方が有効な範囲である場合、結果を比較してください。つまり、<が終了します。それ以外の場合、有効な範囲はありません。