ホームページ >バックエンド開発 >C++ >C# で 2 つの日付間の営業日数を効率的に計算する方法

C# で 2 つの日付間の営業日数を効率的に計算する方法

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-17 18:37:12594ブラウズ

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

C# で 2 つの日付間の営業日数を効率的に計算する方法

2 つの日付間の営業日数の計算には、週末と休日の可能性が考慮されます。 C# には、このタスクを実行するためのいくつかの方法が用意されています。

推奨されるソリューションでは、DateTime クラスを利用して、非効率な毎日の列挙を回避します。この方法では、週全体、週末の一部、および休日を考慮して、指定された間隔内の営業日数が計算されます。アルゴリズムは次のとおりです:

  1. .Date 属性を使用して、入力日付を対応する DateTime オブジェクトに変換します。
  2. 最初の日付が 2 番目の日付以下であることを確認して、入力を検証します。
  3. TimeSpan を使用して日付間の期間を計算し、曜日ごとに曜日カウントを 1 ずつ増やします。
  4. 営業日数を 7 で割って、間隔内の完全な週数を求めます。
  5. 丸 1 週間に収まらない残りの日数については、週末 (土曜日または日曜日) に該当するかどうかを確認してください。その場合は、それに応じて稼働日を減らします。
  6. 一週間の総労働日から週末の数を引きます。
  7. 最後に、指定された休日を反復処理し、その休日が範囲内にある場合は平日の数から減算します。

次はソリューションの実装です:

<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>

以上がC# で 2 つの日付間の営業日数を効率的に計算する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。