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