2 つの日時が与えられます。それらの間の労働時間数を計算する最良の方法は何ですか. 勤務時間は月曜日の 8 時から 5 時 30 分、火曜日から金曜日の 8 時 30 分から 5 時 30 分であり、祝日になる可能性があることを考慮してください。
これは私の努力であり、非常に非効率に見えますが、反復回数と、IsWorkingDay メソッドが DB にアクセスして、その日時が祝日かどうかを確認します。
誰でも最適化や代替案を提案できますか?
public decimal ElapsedWorkingHours(DateTime start, DateTime finish)
{
decimal counter = 0;
while (start.CompareTo(finish) <= 0)
{
if (IsWorkingDay(start) && IsOfficeHours(start))
{
start = start.AddMinutes(1);
counter++;
}
else
{
start = start.AddMinutes(1);
}
}
decimal hours;
if (counter != 0)
{
hours = counter/60;
}
return hours;
}