如何从Timespan中减去十进制值?

问题描述 投票:0回答:2

我目前正试图从一个时差的差值中减去一个值。这个差异代表一个人工作了多少小时。价值是休息和午餐添加。这将从差异中减去。

当我尝试将数据发送到数据库时,错误生成“无法强制转换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);
c# winforms sql-server-2017
2个回答
3
投票

您获得的错误位于您尝试将TimeSpan转换为小数的行。相反,你应该转换TotalHoursTimeSpan

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;

1
投票

您正在尝试将Timespan转换为Decimal,而应该是

Convert.ToDecimal(difference.TotalHours)
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.