我有一些奇怪的要求。我有当前日期和周日列表。我希望接下来所有可能的日期直到目标日期。
对于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
请帮助我获得此类结果。这里,周一和周四不固定。它可以是任何一天和任何天数。
答案 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());
}
(我现在无法测试代码,所以也许你需要修改一下; - )