Я пытаюсь циклично выполнить через КАЖДЫЙ 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, который получает день недели, моя проблема создает цикл, чтобы сделать вышеупомянутое?
кто-либо?
Это будет проходить через все дни от даты начала до даты окончания и получить день недели для каждого.
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
});