在给定月份和年份的情况下,如何获取特定周的日期集?

Any*_*are 0 c# asp.net datetime date

如何dates在特定的一周内得到月份和年份?

例如:

我的参数:

June - 2013  - The second week 
Run Code Online (Sandbox Code Playgroud)

我想要这样的结果集:

9-6-2013
10-6-2013
11-6-2013
12-6-2013
13-6-2013
Run Code Online (Sandbox Code Playgroud)

我希望它从太阳到周四.

Jon*_*eet 7

在我的Noda Time库中,我会:

  • 从上个月末开始
  • 循环次数可以找到下一个星期天
  • 从那里开始,产生日子(所以你可以使用一个foreach循环):

所以:

IEnumerable<LocalDate> GetSundayToWednesday(int year, int month, int week)
{
    LocalDate date = new LocalDate(year, month, 1).PlusDays(-1);        
    for (int i = 0; i < week; i++)
    {
        date = date.Next(IsoDayOfWeek.Sunday);
    }
    // You always want 4 days, Sunday to Wednesday
    for (int i = 0; i < 4; i++)
    {
        yield return date;
        date = date.PlusDays(1);
    }
}
Run Code Online (Sandbox Code Playgroud)

只使用DateTime,我可能会开始在每月,它的第一天可能是(周*7 + 1)和环路,直到我打了一周的天权,然后再从那里:

IEnumerable<DateTime> GetSundayToWednesday(int year, int month, int week)
{
    // Consider breaking this part out into a separate method?
    DateTime date = new DateTime(year, month, week * 7 + 1);
    for (int i = 0; i < 7; i++)
    {
        if (date.DayOfWeek == DayOfWeek.Sunday)
        {
            break;
        }
        date = date.AddDays(1);
    }
    // You always want 4 days, Sunday to Wednesday
    for (int i = 0; i < 4; i++)
    {
        yield return date;
        date = date.AddDays(1);
    }
}
Run Code Online (Sandbox Code Playgroud)

像这样的循环并不是非常有效 - 你可以计算出推进的天数 - 但这显然是对的.您可以通过更有效的方法轻松地以一个一个错误(或回到上个月)结束.当然,如果这很重要,你可以选择付出更多努力来提高效率.