我如何获得不重叠的日期列表,并且不在范围内?
问题描述:
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步:创建一个你需要的属性的类。
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);
你试过只是以一天用一个简单的循环?东西看起来像[this](https://stackoverflow.com/a/3227948/5359302) –