Возможный дубликат:
Как мне пройти через диапазон дат?
Есть ли способ сделать цикл foreach для каждого дня в конкретный месяц?
думать о чем-то вроде
foreach (DateTime date in DateTime.DaysInMonth(2012, 1))
{
}
Возможный дубликат:
Как мне пройти через диапазон дат?
Есть ли способ сделать цикл foreach для каждого дня в конкретный месяц?
думать о чем-то вроде
foreach (DateTime date in DateTime.DaysInMonth(2012, 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
или что-то подобное, если вы делаете это много. Это заставляет ваш код сказать только то, что вы хотите достичь, а не механика за то, как вы это делаете.
Попробуйте вместо этого использовать цикл for.
for (int i = 1; i <= DateTime.DaysInMonth(year, month); i++)
{
DateTime dt = new DateTime(year, month, i);
}
Вы можете использовать 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));
Вы можете сделать это с помощью простого цикла:
DateTime first = new DateTime(2012, 1, 1);
for (DateTime current = first ; current.Month == first.Month ; current = current.AddDays(1)) {
}
Довольно легко создать подсчет дней. Вот один из способов сделать это
Enumerable.Range(1, DateTime.DaysInMonth(year, month)).Select(day =>
new DateTime(year, month, day))