2017-09-24 8 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);