Oh, es muy fácil de recorrer las fechas - que no es un problema en absoluto:
// I'm assuming you want <= to give an *inclusive* end date...
for (DateTime date = start; date <= end; date = date.AddDays(1))
{
// Do stuff with date
}
Desde aquí se puede escribir un IEnumerable<DateTime>
también, y utilizar foreach
.
Trataré de evitar hacer cadena operaciones aquí si es posible - fundamentalmente estas fechas no son cadenas, así que si puedes trabajar en el dominio problemático lo más posible, te facilitará las cosas.
Por supuesto que puede haber maneras más eficientes que bucles, pero será más difícil hacerlo bien. Si el ciclo está bien en términos de rendimiento, me apegaré a eso.
Como un complemento rápido para mi propio proyecto de código abierto, Noda Time tiene un conjunto bastante diverso de tipos que representan fechas y horas; en este caso, usaría LocalDate
. De esta forma, no tiene que preocuparse por lo que sucede si el tiempo de "inicio" es posterior al tiempo en "fin", etc. Por otro lado, Noda Time aún no está terminado ... los bits que necesita para esto están listos y deberían funcionar bien, pero es posible que la API aún pueda cambiar en el futuro.
EDIT: Si hace necesidad de bucle a través de fechas con frecuencia, es posible que desee algo parecido a este método de extensión (ponerlo en una clase estática de nivel superior no genérico):
public static IEnumerable<DateTime> To(this DateTime start, DateTime end)
{
Date endDate = end.Date;
for (DateTime date = start.Date; date <= endDate; date = date.AddDays(1))
{
yield return date;
}
}
continuación:
foreach (DateTime date in start.To(end))
{
...
}
un O mejor (1) solución se puede encontrar aquí: stackoverflow.com/questions/1044688 –