如何从时间跨度中减去一个十进制值?

时间:2019-02-28 23:45:28

标签: c# winforms sql-server-2017

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

当我尝试将数据发送到数据库时,错误生成“无法转换类型为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);

2 个答案:

答案 0 :(得分:3)

您遇到的错误是您尝试将TimeSpan转换为小数的那一行。相反,您应该转换TotalHours中的TimeSpan

fullBreakTime = totalBreak + Convert.ToDecimal(difference.TotalHours);

但是根据您的评论,

  

我正在尝试从总差异中减去总中断时间。例如,如果某人一天工作8个小时,但有1个小时的休息时间,则总计为7

您可以简单地计算工作总小时数,然后减去休息时间(请注意,我在这里使用double而不是decimal,因为TimeSpan用于{ {1}}):

TotalHours

答案 1 :(得分:1)

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

Convert.ToDecimal(difference.TotalHours)