Basierend auf Jacob Proffitt Antwort, aber ohne den Overhead von In-Memory-Liste. Da die DaysBetween seine Daten dynamisch ergibt, wird der Zählwert berechnet als die Liste generiert wird:
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;
}
Natürlich, wenn Sie nicht LINQ to showoff wollten Sie es vereinfachen könnte und gehen mit einer Funktion:
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 beide sind sauberer und einfacher zu verstehen, zu debuggen, zu beheben und zu ändern als jedermanns Lieblings (Rabens Antwort).
Natürlich ist dies eine O (n) -Lösung, dh je mehr die Tage auseinander liegen, desto länger dauert die Berechnung. Während dies in Ordnung sein für die meisten realen Anwendungen, in einigen Fällen können Sie eine Formel-basierten Ansatz bevorzugen, etwas in dieser Richtung:
int q = end.Subtract(begin).Days - (end.Subtract(begin).Days/7);
Danke für Ihre Antwort. Hervorragende Erklärung Können Sie die Erklärung programmatisch mittels Codierung darstellen? – sheetal
Pseudocode hinzugefügt. –