大家好, 我正在开发一个时间管理应用程序作为我的项目的一部分。 我根据 8 小时轮班计算天数、小时数和分钟数。但是当我尝试计算剩余天数和工作天数时,它给出了错误的计算结果。 请检查我的代码
var LeaveTotal = TotalWork(LeaveDays, leaveHours, LeaveMintues);
var t1 = (int)LeaveTotal[0];
var t2 = (int)LeaveTotal[1];
var t3 = (int)LeaveTotal[2];
TimeSpan date1 = new TimeSpan(t1, t2, t3,0);
TimeSpan date2 = new TimeSpan(10, 0, 0,0);
TimeSpan minutes = (date2.Subtract(date1));
现在,如果有 10 天的工作,而有人做了 8 天 5 小时的工作,那么我应该得到 1 天 3 小时作为剩余。 (基于 8 小时轮班制)。但我得到了有趣的结果。
public double[] TotalWork(double days, double totalhours, double minutes)
{
double[] total = new double[3];
var hours = Math.Floor(minutes / 60);
totalhours += hours;
days += Math.Floor(totalhours / 8);
totalhours = totalhours % 8;
var remianingMins = minutes - (hours * 60);
total[0]=(days);
total[1]=(totalhours);
total[2]=(remianingMins);
return total;
}
请帮忙,我被困在这里了。预先感谢
我相信问题在于你正在使用 TimeSpan 减法,你应该在两个日期之间使用你自己的减法方法,因为你正在考虑一天 8 小时,你可以使用这样的函数,它接受两个 double 数组每个包含天、小时和分钟。
static double[] SubtractDates(double[] initialTime, double[] subtractedTime)
{
double initialDays = initialTime[0] + initialTime[1] / 8 + initialTime[2] / (8 * 60);
double subtractedDays = subtractedTime[0] + subtractedTime[1] / 8 + subtractedTime[2] / (8 * 60);
double remainingDays = initialDays - subtractedDays;
double remainingHours = Math.Floor((remainingDays % 1) * 8);
double remainingMinutes = Math.Floor(((remainingDays % 1) * 8 % 1) * 60);
remainingDays = Math.Floor(remainingDays);
double[] result = { remainingDays, remainingHours, remainingMinutes };
return result;
}
当然,迄今为止的数组必须首先通过 TotalWork() 函数才能与 8 小时制兼容。