2017-09-24 51 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); 
相关问题