Vergleichen .NET Datum: Zählen Sie die Menge an Arbeitstagen seit einem Datum?
-
03-07-2019 - |
Frage
Was ist der einfachste Weg, um die Menge an Arbeitstagen seit einem Zeitpunkt zu berechnen? VB.NET bevorzugt, aber C # ist in Ordnung.
Und mit „Arbeitstag“, meine ich alle Tage außer Samstag und Sonntag. Wenn der Algorithmus auch zu berücksichtigen, um eine Liste von spezifischen ‚Ausschluß‘ Daten nehmen kann, die nicht als Arbeitstag zählen sollte, wäre das Soße sein.
Vielen Dank im Voraus für das beigetragen Genie.
Lösung
Dies werde tun, was Sie wollen es. Es soll genug, um konvertieren zu VB.NET, es ist schon zu lange einfach für mich in der Lage sein, es zu tun, aber.
DateTime start = DateTime.Now;
DateTime end = start.AddDays(9);
IEnumerable<DateTime> holidays = new DateTime[0];
// basic data
int days = (int)(end - start).TotalDays;
int weeks = days / 7;
// check for a weekend in a partial week from start.
if (7- (days % 7) <= (int)start.DayOfWeek)
days--;
if (7- (days % 7) <= (int)start.DayOfWeek)
days--;
// lose the weekends
days -= weeks * 2;
foreach (DateTime dt in holidays)
{
if (dt > start && dt < end)
days--;
}
Andere Tipps
Der einfachste Weg ist wahrscheinlich so etwas wie
DateTime start = new DateTime(2008, 10, 3);
DateTime end = new DateTime(2008, 12, 31);
int workingDays = 0;
while( start < end ) {
if( start.DayOfWeek != DayOfWeek.Saturday
&& start.DayOfWeek != DayOfWeek.Sunday ) {
workingDays++;
}
start = start.AddDays(1);
}
Es kann nicht die effizienteste sein, aber es für die einfache Überprüfung einer Liste von Feiertagen erlaubt.
Hier ist ein Beispiel von Steves Formel in VB ohne Urlaub Subtraktion:
Function CalcBusinessDays(ByVal DStart As Date, ByVal DEnd As Date) As Decimal
Dim Days As Decimal = DateDiff(DateInterval.Day, DStart, DEnd)
Dim Weeks As Integer = Days / 7
Dim BusinessDays As Decimal = Days - (Weeks * 2)
Return BusinessDays
Days = Nothing
Weeks = Nothing
BusinessDays = Nothing
End Function
DatDiff zusammen mit
im Allgemeinen (kein Code) - Geige mit den Start- / Enddaten, so dass sie von Montag bis Montag fällt, dann fügen Sie den Unterschied zurück [Entschuldigungen für die No-Code Allgemeinheiten, es ist spät] [C, F. endDate.Subtract (startdate) .TotalDays]
Hier ist ein Verfahren für SQL Server. Es gibt auch eine Vbscript Methode auf der Seite. Nicht genau das, was Sie gefragt, ich weiß.
Wir kombinierten zwei Codeproject Artikel zu einer vollständigen Lösung zu gelangen. Unsere Bibliothek ist nicht genug prägnant als Quellcode zu schreiben, aber ich kann Ihnen zu den beiden Projekten verweisen wir früher zu erreichen, was wir brauchten. Wie immer bei Codeproject Artikel, die Kommentare lesen, kann es in ihnen wichtige Informationen sein.
Die Berechnung Werktagen: http://www.codeproject.com/KB/cs /busdatescalculation.aspx
Eine Alternative Arbeitstag berechnet: http://www.codeproject.com/KB/cs/datetimelib.aspx
Die Berechnung Urlaub: http://www.codeproject.com/KB/dotnet/ HolidayCalculator.aspx