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

本文关键字:列表 获取 取日期 周天数 当前日期 | 更新日期: 2023-09-27 17:59:24

我有一些奇怪的需求。我有当前日期和周天数列表。我想要下一个所有可能的日期,直到目标日期

例如Today, its 22-04-2014 And Tuesday. Target date is 15-05-2014

我有两个工作日,周一和周四所以代码应该在星期四之前找到。因此,返回日期应为星期四,即2014年4月24日。现在,下一轮是星期一,它来自列表。所以现在,它应该返回日期星期一,即2014年4月28日

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

因此,最终结果将是

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

请帮我得到这样的结果。在这里,星期一和星期四是不固定的。它可以是任何一天,也可以是任何数量的一天。

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

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

你可以试试这个代码,我已经测试过了,工作正常

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;
        }

以下是示例

因此,你可以根据自己的意愿度过任意数量的周。

希望这能帮助

你可以试试这样的东西:

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());
}

(我现在无法测试代码,所以可能需要修改一点;-)