Цикл через дни недели внутри класса C# TimeSpan
Я пытаюсь цикл через каждый день недели между 2 периодами времени
DateTime start = new DateTime(2010, 1, 1);
DateTime end = new DateTime(2011, 12, 12);
мне удалось получить количество дней между этими датами, используя следующий код
TimeSpan range = (end - start);
оказывается 710.
теперь я ищу, чтобы получить за каждый месяц дни недели,
например
января 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 171 18 19 20 . . .
С соответствующим
М Т Ж Т Ф Ы Х М Т W T F S S M
Я понимаю, что c# имеет свойство из класса DateTime DayOfWeek, которое получает день недели моя проблема заключается в создании цикла для выполнения вышеуказанного?
кого?
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;
// ...
}
Если вы действительно не беспокоитесь об оптимизации, я бы не стал прибегать к чему-то более сложному.
мне нравится следующее:
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);
}
вы можете изменить его, чтобы вернуть различные типы, конечно.
использование 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
});