2017-09-24 3 views
0
Group A 

Start date: 1/1/2017 
End date: 1/31/2017 

Group B 

Start date: 1/29/2017 
End date: 2/4/2017 

どのようにして、重複しない範囲の範囲内にない日付のリストを取得できますか?日付の範囲は、(グループBの日付は、グループAの日付以内の範囲に落ちる)重なったりしなければ、私はこれで行くことができます見つけるには

If (GroupA.StartDate<= GroupB.EndDate && GroupB.StartDate<= GroupA.EndDate) 
{ 
    //Date in range - overlaps. 
} 

がどのように私はドン日付のリストを得るのですか重なり合って範囲に入っていない?上記の例では

、私は効率的に戻って事前に

1/29 - Yes 
1/30 - Yes 
1/31- Yes 
2/1 - No 
2/2 - No 
2/3- No 
2/4- No 

感謝を取得したいです。

+1

は、あなたが一日だけで単純なループを使用しようとしたことがありますか? [this](https://stackoverflow.com/a/3227948/5359302)のようなものです –

答えて

1

これは動作します。

手順1:必要なプロパティを持つクラスを作成します。

public class MyDate 
    { 

     public DateTime Date { get; set; } 
     public bool IsValid { get; set; } 
    } 

ステップ2:

public List<MyDate> CheckDates(DateTime groupAStart, DateTime groupAEnd, 
           DateTime groupBStart, DateTime groupBEnd) 
     { 
      List<MyDate> myDates=new List<MyDate>(); 
      for (DateTime date = groupAStart; date <= groupAEnd; date = date.AddDays(1)) 
      { 
       MyDate myDate = new MyDate(); 
       if (date > groupBEnd || groupBStart > date) 
       { 
        myDate.Date = date; 
        myDate.IsValid = false; 
       } 
       if(myDate.Date> DateTime.MinValue) 
        myDates.Add(myDate); 

      } 
      return myDates; 
     } 

テストそれ:

  DateTime groupAStart = Convert.ToDateTime("1/29/2017"); 
      DateTime groupAEnd = Convert.ToDateTime("2/5/2017"); 
      DateTime groupBStart = Convert.ToDateTime("1/1/2017"); 
      DateTime groupBEnd= Convert.ToDateTime("1/31/2017"); 
      var results = CheckDates(groupAStart , groupAEnd , groupBStart , groupBEnd); 
関連する問題