Sobre la base de Jacob Proffitt respuesta, pero sin la sobrecarga de lista en memoria. Desde el DaysBetween produce sus fechas de forma dinámica, el recuento se calcula como se genera la lista:
int c = DaysBetween(begin, end).Count(d => d.DayOfWeek != DayOfWeek.Sunday);
private IEnumerable<DateTime> DaysBetween(DateTime begin, DateTime end)
{
for(var d = begin; d <= end; d.AddDays(1)) yield return d;
}
Por supuesto, si no quería showoff LINQ se podía simplificar e ir con una función:
private int DaysBetween(DateTime begin, DateTime end)
{
int count = 0;
for(var d = begin; d <= end; d.AddDays(1))
if(d.DayOfWeek != DayOfWeek.Sunday) count++
return count;
}
En mi humilde opinión, ambos son más limpios y fáciles de entender, depurar, solucionar y modificar que los favoritos de todos (respuesta de cuervo).
Por supuesto, esta es una solución O (n), lo que significa que cuanto más separados están los días, más tiempo se tarda en calcular. Si bien esto puede ser aceptable para la mayoría de aplicaciones del mundo real, en algunos casos puede ser preferible un enfoque basado en una fórmula, algo a lo largo de estas líneas:
int q = end.Subtract(begin).Days - (end.Subtract(begin).Days/7);
Gracias por su respuesta. Excelente explicación ¿Puede representar la explicación programáticamente por medio de la codificación? – sheetal
Seudocódigo agregado. –