11

日付からの稼働日数を計算する最も簡単な方法は何ですか? VB.NET が推奨されますが、C# も問題ありません。

また、「営業日」とは、土日を除くすべての日を意味します。アルゴリズムが、稼働日としてカウントされるべきではない特定の「除外」日付のリストも考慮できる場合、それはグレービーになります.

貢献してくれた天才に感謝します。

4

7 に答える 7

16

これはあなたが望むことをします。VB.NETに変換するのは簡単なはずですが、私には長すぎて変換できませんでした。

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--;
}
于 2008-10-03T06:43:35.457 に答える
13

最も簡単な方法は、おそらく次のようなものです

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);
}

最も効率的ではないかもしれませんが、休日のリストを簡単に確認できます。

于 2008-10-03T06:29:35.460 に答える
4

これは、休日の減算なしのVBでのSteveの式のサンプルです。

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
于 2011-08-02T15:22:15.370 に答える
3

DateDiff他のいくつかの Date* 関数は、VB.NET に固有のものであり、多くの場合、C# 開発者の羨望の的となっています。ただし、この場合に非常に役立つかどうかはわかりません。

于 2008-10-03T06:37:26.097 に答える
2

一般的に(コードなし) -

  • 日付を減算して日数を取得します
  • 週数を得るために7で割る
  • 週数×2を引く
  • 日付範囲に該当する休日の日付の数を数える
  • その数を引く

月曜日から月曜日になるように開始日と終了日をいじってから、差を足し戻します

[ノーコードの一般論で申し訳ありません、遅くなりました]

[cf endDate.Subtract(startDate).TotalDays]

于 2008-10-03T06:40:35.170 に答える
1

SQL Server のメソッドを次に示します。ページには vbscript メソッドもあります。あなたが求めたものとは正確には違います。

于 2008-10-03T06:27:56.807 に答える
1

2 つの CodeProject 記事を組み合わせて、完全なソリューションにたどり着きました。私たちのライブラリはソース コードとして投稿するには簡潔ではありませんが、必要なことを達成するために使用した 2 つのプロジェクトを紹介できます。CodeProject の記事と同様に、コメントを読んでください。重要な情報が含まれている可能性があります。

営業日の計算: http://www.codeproject.com/KB/cs/busdatescalculation.aspx

別の営業日計算: http://www.codeproject.com/KB/cs/datetimelib.aspx

休日の計算: http://www.codeproject.com/KB/dotnet/HolidayCalculator.aspx

于 2008-10-03T06:38:36.500 に答える