根据当前日期和周日列表获取日期

时间:2014-04-22 11:58:07

标签: c# date

我有一些奇怪的要求。我有当前日期和周日列表。我希望接下来所有可能的日期直到目标日期。

对于Today, its 22-04-2014 And Tuesday. Target date is 15-05-2014
我有2周的工作日,周一和周四。所以代码应该在工作日附近找到,这将是星期四。因此它应该返回星期四的日期,即24-04-2014 。现在,下一轮是来自List的星期一。现在,它应该返回星期一的日期,即28-04-2014

它应该一直重复到目标日期。

所以,最终结果将是

24-04-2014,
28-04-2014,
1-05-2014,
5-05-2014,
8-05-2014,
12-05-2014

请帮助我获得此类结果。这里,周一和周四不固定。它可以是任何一天和任何天数。

2 个答案:

答案 0 :(得分:2)

更新:链接到工作示例 - Example

您可以尝试使用此代码,我已对其进行了测试并正常运行

private List<DateTime> ProcessDate(DateTime dtStartDate, DateTime targetDate)
        {
            DateTime dtLoop = dtStartDate;
            //dtRequiredDates to hold required dates
            List<DateTime> dtRequiredDates = new List<DateTime>();
            for (int i = dtStartDate.DayOfYear; i < targetDate.DayOfYear; i++)
            {
                if (dtLoop.DayOfWeek == DayOfWeek.Monday || dtLoop.DayOfWeek == DayOfWeek.Thursday)
                {
                    dtRequiredDates.Add(dtLoop);
                }
                dtLoop = dtLoop.AddDays(1);
            }
            return dtRequiredDates;
        }

您可能必须增强此代码,以便它不会根据要求抛出任何异常。

更新2: 您可以使用另一种接受星期几的方法,如下所示

private List<DateTime> ProcessDate(DateTime dtStartDate, DateTime targetDate, List<DayOfWeek> daysOfWeek)
        {
            DateTime dtLoop = dtStartDate;
            List<DateTime> dtRequiredDates = new List<DateTime>();
            for (int i = dtStartDate.DayOfYear; i < targetDate.DayOfYear; i++)
            {
                foreach (DayOfWeek day in daysOfWeek)
                {
                    if (dtLoop.DayOfWeek == day)
                    {
                        dtRequiredDates.Add(dtLoop);
                    }
                }
                dtLoop = dtLoop.AddDays(1);
            }
            return dtRequiredDates;
        }

以下是Example

因此,您可以按照自己的意愿传递任意数量的工作日。

希望这有帮助

答案 1 :(得分:0)

您可以尝试这样的事情:

List<DayOfWeek> listOfDays = new List<DayOfWeek>{DayOfWeek.Monday, DayOfWeek.Thursday};
var end = new DateTime(2014,05,15);
var day = DateTime.Now.Date;
while (day < end)
{
    day.AddDays(1); // adds +1 days to "day"
    if (listOfDays.Contains(day.DayOfWeek)) Console.WriteLine(day.Date.ToString());
}

(我现在无法测试代码,所以也许你需要修改一下; - )