rikidev Ответов: 3

Добавьте разницу в часах и минутах в C#


Hi I have to run uses sum of time differences in the following format:
StartEnd[0]: 08:50
StartEnd1: 10:30
StartEnd[2]: 12:30
StartEnd[3]: 15:30

result=(StartEnd 1 -StartEnd[0])+(StartEnd[3]-StartEnd[2])


How can I get the result value in the HH: mm format?


Что я уже пробовал:

C# Code:
<pre>TimeSpan totalSum = TimeSpan.Zero;
foreach (DataRow dr in dt.Rows)
{
    string[] HourAndMinute = dr["StartEnd"].ToString().Split(); 
    TimeSpan tsStart = TimeSpan.Parse(HourAndMinute[0].Trim());
    TimeSpan tsEnd = TimeSpan.Parse(HourAndMinute[1].Trim());
    totalSum += tsEnd - tsStart;
}

3 Ответов

Рейтинг:
1

OriginalGriff

Конвертируйте каждый раз в минуты:

08:50 ==> (08 * 60) + 50 ==> 530
10:30 ==> (10 * 60) + 50 ==> 650
Затем
(StartEnd 1 -StartEnd[0]) ==> 650 - 530 ==> 120 minutes
и так далее.
Когда у вас есть результат в минутах, он прост в использовании деления, чтобы получить часы, и модуля, чтобы получить минуты:
int hours = result / 60;
int minutes = result % 60;


Рейтинг:
1

Gerry Schmitz

TimeSpan ts0 = TimeSpan.Parse( "08:50" );
TimeSpan ts1 = TimeSpan.Parse( "10:30" );
TimeSpan ts2 = TimeSpan.Parse( "12:30" );
TimeSpan ts3 = TimeSpan.Parse( "15:30" );

int minutes = (int) ( ts1.TotalMinutes - ts0.TotalMinutes + ts3.TotalMinutes - ts2.TotalMinutes );
TimeSpan ts = new TimeSpan( 0, minutes, 0 );

Console.WriteLine( $"HH: {ts.Hours:D2} mm: {ts.Minutes:D2}" );


Рейтинг:
1

Patrice T

Цитата:
Добавьте разницу в часах и минутах в C#

Часы являются десятичными, минуты-десятичными, но время (часы + минуты) не является десятичным.
Но часы и минуты связаны: 1 час-это 60 минут.
Поэтому, чтобы сделать "арифметику времени", вам нужно справиться с этой особенностью.
У вас есть в основном 2 возможности:
- используйте стандартный тип данных datetime, он будет обрабатывать все детали за вас.
- создайте свое собственное решение: преобразование часов в минуты выглядит проще всего.

В принципе, ваша процедура такова:
convert the times to minutes
do whatever arithmetic operation you need
covert result back to times