Sulla base di Jacob Proffitt risposta, ma senza il sovraccarico di elenco in memoria. Dal momento che il DaysBetween cede le sue date in modo dinamico, il conteggio viene calcolata come l'elenco viene generato:
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;
}
Naturalmente se non voleva showoff LINQ si potrebbe semplificare e andare con una funzione:
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;
}
IMHO entrambi questi sono più chiari e facili da capire, eseguire il debug, risolvere i problemi e modificare rispetto al preferito di tutti (risposta del corvo).
Ovviamente, questa è una soluzione O (n), il che significa che più i giorni sono separati, più tempo è necessario per calcolare. Anche se questo potrebbe essere ok per la maggior parte delle applicazioni del mondo reale, in alcuni casi si può preferire un approccio formula a base, qualcosa in questo senso:
int q = end.Subtract(begin).Days - (end.Subtract(begin).Days/7);
Grazie per la risposta. Spiegazione eccellente Potete rappresentare la spiegazione in modo programmatico tramite la codifica? – sheetal
Aggiunto pseudocodice. –