Heim >Backend-Entwicklung >C++ >Wie berechnet man effizient die Anzahl der Geschäftstage zwischen zwei Daten in C#?

Wie berechnet man effizient die Anzahl der Geschäftstage zwischen zwei Daten in C#?

Linda Hamilton
Linda HamiltonOriginal
2025-01-17 18:37:12638Durchsuche

How to Efficiently Calculate the Number of Business Days Between Two Dates in C#?

So berechnen Sie effizient die Anzahl der Arbeitstage zwischen zwei Daten in C#

Bei der Berechnung der Anzahl der Arbeitstage zwischen zwei Daten werden Wochenenden und mögliche Feiertage berücksichtigt. C# bietet mehrere Möglichkeiten, diese Aufgabe zu erfüllen.

Eine vorgeschlagene Lösung nutzt die Klasse DateTime, um eine ineffiziente tägliche Aufzählung zu vermeiden. Diese Methode berechnet die Anzahl der Arbeitstage in einem bestimmten Intervall unter Berücksichtigung ganzer Wochen, angebrochener Wochenenden und Feiertage. Der Algorithmus lautet wie folgt:

  1. Verwenden Sie das Attribut .Date, um das Eingabedatum in das entsprechende DateTime-Objekt umzuwandeln.
  2. Überprüfen Sie die Eingabe, indem Sie sicherstellen, dass das erste Datum kleiner oder gleich dem zweiten Datum ist.
  3. Verwenden Sie TimeSpan, um die Zeitspanne zwischen Datumsangaben zu berechnen und die Wochentagsanzahl für jeden Tag um 1 zu erhöhen.
  4. Dividieren Sie die Anzahl der Arbeitstage durch 7, um die Anzahl der vollständigen Wochen im Intervall zu ermitteln.
  5. Überprüfen Sie bei verbleibenden Tagen, die nicht in eine ganze Woche passen, ob sie auf ein Wochenende (Samstag oder Sonntag) fallen. Wenn ja, reduzieren Sie die Anzahl der Arbeitstage entsprechend.
  6. Subtrahieren Sie die Anzahl der Wochenenden von der Gesamtzahl der Arbeitstage während der gesamten Woche.
  7. Abschließend durchlaufen Sie alle angegebenen Feiertage und subtrahieren sie von der Wochentagsanzahl, wenn sie in das Intervall fallen.

Das Folgende ist die Implementierung der Lösung:

<code class="language-csharp">public static int BusinessDaysUntil(this DateTime firstDay, DateTime lastDay, params DateTime[] bankHolidays)
{
    firstDay = firstDay.Date;
    lastDay = lastDay.Date;
    if (firstDay > lastDay)
        throw new ArgumentException("Incorrect last day " + lastDay);

    TimeSpan span = lastDay - firstDay;
    int businessDays = span.Days + 1;
    int fullWeekCount = businessDays / 7;

    // 计算周末天数
    int weekendDays = fullWeekCount * 2;
    int remainingDays = businessDays % 7;
    int firstDayOfWeek = (int)firstDay.DayOfWeek;
    int lastDayOfWeek = (int)lastDay.DayOfWeek;

    if (remainingDays > 0)
    {
        if (lastDayOfWeek == 0) lastDayOfWeek = 7; // 将周日转换为7
        if (firstDayOfWeek == 0) firstDayOfWeek = 7; // 将周日转换为7

        if (lastDayOfWeek < 6)
            weekendDays += 0; // 如果最后一天不是周末,则不加周末天数
        else if (lastDayOfWeek == 6)
            weekendDays += 1; // 如果最后一天是周六,则加一天
        else
            weekendDays += 2; // 如果最后一天是周日,则加两天

        if (firstDayOfWeek == 7)
            weekendDays -= 1; // 如果第一天是周日,则减一天
        else if (firstDayOfWeek == 6)
            weekendDays -= 1; // 如果第一天是周六,则减一天

    }

    businessDays -= weekendDays;

    foreach (DateTime bankHoliday in bankHolidays)
    {
        DateTime bh = bankHoliday.Date;
        if (bh >= firstDay && bh <= lastDay)
            businessDays--;
    }

    return businessDays;
}</code>

Das obige ist der detaillierte Inhalt vonWie berechnet man effizient die Anzahl der Geschäftstage zwischen zwei Daten in C#?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn