Цикличное выполнение в течение дней недели в классе C# TimeSpan

Я пытаюсь циклично выполнить через КАЖДЫЙ DAYof НЕДЕЛЮ между 2 периодами времени

  DateTime start = new DateTime(2010, 1, 1);
  DateTime end = new DateTime(2011, 12, 12);

Мне удалось получить количество дней между этими датами с помощью следующего кода

     TimeSpan range = (end - start);

окажитесь 710.

Я теперь надеюсь получать в течение каждого месяца ДНИ НЕДЕЛИ,

Например,

Jan 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 171 18 19 20...

с соответствием

M T W T F S S M T W T F S S M

Я понимаю, что c# имеет свойство от класса DateTime DayOfWeek, который получает день недели, моя проблема создает цикл, чтобы сделать вышеупомянутое?

кто-либо?

10
задан Calibre2010 21 April 2010 в 14:33
поделиться

3 ответа

Это будет проходить через все дни от даты начала до даты окончания и получить день недели для каждого.

DateTime startDate = new DateTime(2010, 1, 1);
DateTime endDate = new DateTime(2011, 12, 12);
for (DateTime date = startDate; date <= endDate; date = date.AddDays(1))
{
    DayOfWeek dw = date.DayOfWeek;
    // ...
}

Если вы действительно не беспокоитесь об оптимизации, я бы не стал прибегать к чему-то более сложному.

20
ответ дан 3 December 2019 в 16:09
поделиться

Мне нравится следующее:

static IEnumerable Days(DateTime start, DateTime end)
{
    while (start < end)
    {
        string day = start.ToString("ddd");

        start = start.AddDays(1);

        yield return day;
    }
}

Как его использовать:

foreach(string s in Days(new DateTime(2010, 1, 1), new DateTime(2010, 2, 1)))
{
    Console.WriteLine(s);
}

Вы, конечно, можете изменить его, чтобы возвращать различные типы.

3
ответ дан 3 December 2019 в 16:09
поделиться

Использование LINQ:

DateTime start = new DateTime(2010, 1, 1);
DateTime end = new DateTime(2011, 12, 12);
int days = (end  - start).Days;

Enumerable
    .Range(0, days)
    .Select(x => start.AddDays(x))
    .ToList()
    .ForEach(d =>
    {
        DayOfWeek dayOfWeek = d.DayOfWeek;
        // do what you want
    });
3
ответ дан 3 December 2019 в 16:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: