-2

特定の時間帯で異なる賃金率を計算する方法を知りたいです。

例: 誰かが午前 9 時から午後 5 時まで働いた場合、1 倍のレートを受け取ります。その同じ人が午前 9 時から午後 7 時まで働いている場合、午前 9 時から午後 5 時までは 1 倍のレートを取得し、午後 5 時から午後 7 時までは 1.5 倍のレートを取得します。

ただし、私は現在、作業を開始するときに DateTime.Now を使用し、その間の時間を計算するために期間を使用して終了するときに DateTime.Now を使用しています。

方法がわからないので何も試していません。

4

1 に答える 1

0

ここで試してみてください:

static double Rate = 20.0; // 20$ per hour 9am to 5pm    

static double TotalPayment(DateTime startTime, DateTime endTime)
{
  if (startTime > endTime)
    throw new ArgumentException("start must be before end");
  if (startTime.Date != endTime.Date)
    throw new NotImplementedException("start and end must be on same day");

  double totalHours = (endTime - startTime).TotalHours;

  double startOfOrdinaryRate = Math.Max(9.0, startTime.TimeOfDay.TotalHours);
  double endOfOrdinaryRate = Math.Min(17.0, endTime.TimeOfDay.TotalHours);
  double ordinaryHours;
  if (startOfOrdinaryRate > endOfOrdinaryRate)
    ordinaryHours = 0.0;
  else
    ordinaryHours = endOfOrdinaryRate - startOfOrdinaryRate;

  return 1.0 * Rate * ordinaryHours
    + 1.5 * Rate * (totalHours - ordinaryHours);
}

動作するかどうかテストします。

于 2012-09-08T21:30:36.190 に答える