Подтвердить что ты не робот

Foreach день в месяц

Возможный дубликат:
Как мне пройти через диапазон дат?

Есть ли способ сделать цикл foreach для каждого дня в конкретный месяц?

думать о чем-то вроде

foreach (DateTime date in DateTime.DaysInMonth(2012, 1))
{
}
4b9b3361

Ответ 1

Вы можете легко написать вспомогательный метод:

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);
    }
}

Затем назовите его с помощью

foreach (DateTime date in AllDatesInMonth(2012, 1))

Это, вероятно, слишком много для того, что вы делаете только один раз, но это гораздо лучше, чем использование цикла for или что-то подобное, если вы делаете это много. Это заставляет ваш код сказать только то, что вы хотите достичь, а не механика за то, как вы это делаете.

Ответ 2

Попробуйте вместо этого использовать цикл for.

for (int i = 1; i <= DateTime.DaysInMonth(year, month); i++)
{
  DateTime dt = new DateTime(year, month, i);
}

Ответ 3

Вы можете использовать Range:

Enumerable
    .Range(1, DateTime.DayInMonth(2012, 1)
    .Select(i => new DateTime(2012, 1, i)))
    .ToList() // ForEach is not a Linq to Sql method (thanks @Markus Jarderot)
    .ForEach(day => Console.Write(day));

Ответ 4

Вы можете сделать это с помощью простого цикла:

DateTime first = new DateTime(2012, 1, 1);
for (DateTime current = first ; current.Month == first.Month ; current = current.AddDays(1)) {
}

Ответ 5

Довольно легко создать подсчет дней. Вот один из способов сделать это

Enumerable.Range(1, DateTime.DaysInMonth(year, month)).Select(day =>
    new DateTime(year, month, day))