Получить даты с определенной недели в месяце - PullRequest
0 голосов
/ 13 декабря 2018

Мне удалось создать метод, который возвращает все даты определенного месяца и года.

Мой код для этого:

   public static IEnumerable<DateTime> AllDatesInMonth(int year, int month)
    {
        int days = DateTime.DaysInMonth(year, month);
        for (int day = 1; day <= days; day++)
        {
            yield return new DateTime(year, month, day);
        }
    }

Теперь я хочу получить вседаты с номер недели недели месяца

Пример: Я хочу получить даты с 2-й недели из December иначальный день - Saturday.

Результат будет:

12/8/2018 Saturday
12/9/2018 Sunday
12/10/2018 Monday 
12/11/2018 Tuesday
12/12/2018 Wednesday
12/13/2018 Thursday
12/14/2018 Friday

1 Ответ

0 голосов
/ 13 декабря 2018

Единственная сложность состоит в том, чтобы вычислить начальную дату ;давайте используем по модулю арифметики для этого:

public static IEnumerable<DateTime> AllDatesInWeekOfMonth(int year, int month, int week) {
  DateTime start = new DateTime(year, month, 1);

  start = start
    .AddDays((CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek - start.DayOfWeek + 7) % 7)
    .AddDays(week * 7 - 7);

  for (int i = 0; i < 7; ++i)
    if (start.Month == month) {
      yield return start;

      start = start.AddDays(1);
    }
}

Демо:

// Different cultures have different first day of week
// In case of Invariant Culture week starts from Sunday
CultureInfo.CurrentCulture = CultureInfo.InvariantCulture;

string test = string.Join(Environment.NewLine,
    AllDatesInWeekOfMonth(2018, 12, 2)
       .Select(date => date.ToString("dd MMMM yyyy (dddd)")));

Console.WriteLine(test);

Результат:

09 December 2018 (Sunday)      // <- Week starts from Sunday
10 December 2018 (Monday)
11 December 2018 (Tuesday)
12 December 2018 (Wednesday)
13 December 2018 (Thursday)
14 December 2018 (Friday)
15 December 2018 (Saturday)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...