如何从时间跨度中减去小数值?
How can i subtract a decimal value from a Timespan?
我目前正在尝试从时间跨度的差异中减去一个值。这种差异代表一个人工作了多少小时。价值是增加了休息和午餐。这将从差异中减去。
当我尝试将数据发送到数据库时出现错误 "unable to cast object of type System.TimeSpan "
DateTime b = DateTime.Parse(StartTimeddl.Text);
DateTime c = DateTime.Parse(EndTimeddl.Text);
decimal d = Convert.ToDecimal(BreakDurationddl.Text);
decimal f = Convert.ToDecimal(LunchDurationddl.Text);
decimal totalBreak = f + d;
decimal fullBreakTime = 0;
TimeSpan difference = (c.Subtract(b));
cmd.Parameters.Add("@Total_Hours_Day", SqlDbType.Decimal).Value = difference.Hours;
cmd.ExecuteNonQuery();
fullBreakTime = totalBreak + Convert.ToDecimal(difference);
您遇到的错误是在您尝试将 TimeSpan
转换为小数的那一行。相反,您应该转换 TotalHours
的 TimeSpan
:
fullBreakTime = totalBreak + Convert.ToDecimal(difference.TotalHours);
但是从你的评论来看,
I am trying to subtract the totalbreak time from the total difference. eg if someone has worked 8 hours a day and had 1 hour break it would be a total of 7
你可以简单地计算总工作小时数,然后减去休息时间(注意我在这里使用 double
而不是 decimal
因为那是 TimeSpan
使用的TotalHours
):
double hoursLogged = (c - b).TotalHours; // or (b-c).Duration().TotalHours()
double totalBreak = f + d;
double hoursWorked = hoursLogged - totalBreak;
您正在尝试将时间跨度转换为十进制,而应该是
Convert.ToDecimal(difference.TotalHours)
我目前正在尝试从时间跨度的差异中减去一个值。这种差异代表一个人工作了多少小时。价值是增加了休息和午餐。这将从差异中减去。
当我尝试将数据发送到数据库时出现错误 "unable to cast object of type System.TimeSpan "
DateTime b = DateTime.Parse(StartTimeddl.Text);
DateTime c = DateTime.Parse(EndTimeddl.Text);
decimal d = Convert.ToDecimal(BreakDurationddl.Text);
decimal f = Convert.ToDecimal(LunchDurationddl.Text);
decimal totalBreak = f + d;
decimal fullBreakTime = 0;
TimeSpan difference = (c.Subtract(b));
cmd.Parameters.Add("@Total_Hours_Day", SqlDbType.Decimal).Value = difference.Hours;
cmd.ExecuteNonQuery();
fullBreakTime = totalBreak + Convert.ToDecimal(difference);
您遇到的错误是在您尝试将 TimeSpan
转换为小数的那一行。相反,您应该转换 TotalHours
的 TimeSpan
:
fullBreakTime = totalBreak + Convert.ToDecimal(difference.TotalHours);
但是从你的评论来看,
I am trying to subtract the totalbreak time from the total difference. eg if someone has worked 8 hours a day and had 1 hour break it would be a total of 7
你可以简单地计算总工作小时数,然后减去休息时间(注意我在这里使用 double
而不是 decimal
因为那是 TimeSpan
使用的TotalHours
):
double hoursLogged = (c - b).TotalHours; // or (b-c).Duration().TotalHours()
double totalBreak = f + d;
double hoursWorked = hoursLogged - totalBreak;
您正在尝试将时间跨度转换为十进制,而应该是
Convert.ToDecimal(difference.TotalHours)