【问题标题】:How do i get the list of the dates that don't overlap and don't fall in the range?如何获取不重叠且不在范围内的日期列表?
【发布时间】:2018-03-05 19:06:06
【问题描述】:
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

提前致谢。

【问题讨论】:

  • 你有没有试过只使用一个简单的循环一天?有点像this

标签: c# asp.net .net c#-4.0 c#-3.0


【解决方案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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-02
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    • 2020-04-24
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    相关资源
    最近更新 更多