C# 在c中使用timespan计算费率#

C# 在c中使用timespan计算费率#,c#,C#,我想知道如何计算不同工作时间的工资率 例如:如果有人在上午9点到下午5点工作,他们将收到1倍的费率。 如果同一个人从上午9点到晚上7点工作,他们将从上午9点到下午5点获得1倍的费率,然后从下午5点到晚上7点获得1.5倍的费率 但是,我目前使用的是日期时间。现在是指他们开始工作的时间和日期时间。现在是指他们完成工作的时间,使用时间跨度来计算两者之间的小时数 我什么都没试过,因为我不知道怎么做。试试看: static double Rate = 20.0; // 20$ per hour 9am t

我想知道如何计算不同工作时间的工资率

例如:如果有人在上午9点到下午5点工作,他们将收到1倍的费率。 如果同一个人从上午9点到晚上7点工作,他们将从上午9点到下午5点获得1倍的费率,然后从下午5点到晚上7点获得1.5倍的费率

但是,我目前使用的是日期时间。现在是指他们开始工作的时间和日期时间。现在是指他们完成工作的时间,使用时间跨度来计算两者之间的小时数


我什么都没试过,因为我不知道怎么做。

试试看:

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

一定要测试它是否有效。

你忘记问问题了。有什么问题?如果他们从上午11点工作到晚上7点,那么费用是多少?或者,如果他们完全在9到5之间工作,那么他们的费率是多少?我认为你需要更多地定义你的规则。在早上7点到下午5点之间1.1倍(不管怎样),然后在下午5点到晚上7点之间1.5倍,所以早上7点到下午5点之间的任何事情都必须是1.5倍的费率,所以(下午5点->早上7点必须是1.5倍的费率)“我没有尝试过任何事情,因为我不知道怎么做。”。好的你考虑过什么?你想到了什么方法?你被困在哪里了?我有开始和结束的时间戳,但我不知道如何设置约束来检查工人是否加班。