根据当前日期和周天数列表获取日期
本文关键字:列表 获取 取日期 周天数 当前日期 | 更新日期: 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());
}
(我现在无法测试代码,所以可能需要修改一点;-)