我想知道如何计算特定时间之间的不同工资率。
例如:如果有人从上午 9 点到下午 5 点工作,他们将获得 1 倍的费率。如果同一个人从上午 9 点到晚上 7 点工作,他们将在上午 9 点到下午 5 点获得 1 倍费率,然后从下午 5 点到晚上 7 点获得 1.5 倍费率。
但是,我目前在他们开始工作时使用 DateTime.Now,在他们完成使用时间跨度来计算两者之间的小时数时使用 DateTime.Now。
我没有尝试过任何事情,因为我不知道该怎么做。
我想知道如何计算特定时间之间的不同工资率。
例如:如果有人从上午 9 点到下午 5 点工作,他们将获得 1 倍的费率。如果同一个人从上午 9 点到晚上 7 点工作,他们将在上午 9 点到下午 5 点获得 1 倍费率,然后从下午 5 点到晚上 7 点获得 1.5 倍费率。
但是,我目前在他们开始工作时使用 DateTime.Now,在他们完成使用时间跨度来计算两者之间的小时数时使用 DateTime.Now。
我没有尝试过任何事情,因为我不知道该怎么做。
这是一个尝试:
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);
}
做测试是否有效。