Как я могу вычесть десятичное значение из промежутка времени? - PullRequest
0 голосов
/ 01 марта 2019

В настоящее время я пытаюсь вычесть значение из разницы, которая является временным интервалом.эта разница показывает, сколько часов человек работал.значение - перерыв и обед.Это будет вычтено из разницы.

Когда я пытаюсь отправить данные в базу данных, возникает ошибка «невозможно привести объект типа 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 голосов
/ 01 марта 2019

Вы пытаетесь преобразовать Timespan в Десятичное, вместо этого должно быть

Convert.ToDecimal(difference.TotalHours)
0 голосов
/ 01 марта 2019

Ошибка, которую вы получаете, находится на линии, где вы пытаетесь преобразовать TimeSpan в десятичную.Вместо этого вы должны преобразовать TotalHours из TimeSpan:

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

Но из вашего комментария

Я пытаюсь вычесть общее время перерыва из общей разницы,Например, если кто-то работал 8 часов в день и имел 1-часовой перерыв, это было бы в общей сложности 7

, вы можете просто рассчитать общее количество отработанных часов и затем вычесть время перерыва (примечание I 'я работаю с double вместо decimal здесь, поскольку именно это TimeSpan использует для TotalHours):

double hoursLogged = (c - b).TotalHours;  // or (b-c).Duration().TotalHours()
double totalBreak = f + d;
double hoursWorked = hoursLogged - totalBreak;
...