我目前正试图从一个时差的差值中减去一个值。这个差异代表一个人工作了多少小时。价值是休息和午餐添加。这将从差异中减去。
当我尝试将数据发送到数据库时,错误生成“无法强制转换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);
但是根据你的评论,
我试图从总差异中减去总爆发时间。例如,如果某人每天工作8小时并且休息1小时,那么总共会有7个小时
你可以简单地计算总工作小时数然后减去休息时间(注意我在这里使用double
而不是decimal
,因为那是TimeSpan
用于TotalHours
的):
double hoursLogged = (c - b).TotalHours; // or (b-c).Duration().TotalHours()
double totalBreak = f + d;
double hoursWorked = hoursLogged - totalBreak;
您正在尝试将Timespan转换为Decimal,而应该是
Convert.ToDecimal(difference.TotalHours)