如何获得ä¸é‡å ä½†ä¸å±žäºŽè¯¥èŒƒå›´çš„日期列表?

时间:2017-09-24 20:32:55

标签: c# asp.net .net c#-4.0 c#-3.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 个答案:

答案 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);