Добавьте разницу в часах и минутах в c # - PullRequest
0 голосов
/ 05 июля 2018

Привет, мне нужно запустить, использует сумму временных разниц в следующем формате:

  1. StartEnd [0]: 08: 50
  2. StartEnd 1 : 10: 30
  3. StartEnd [2]: 12: 30
  4. StartEnd [3]: 15: 30

    результат = (StartEnd 1 -StartEnd [0]) + (StartEnd [3] -StartEnd [2])

Как получить значение результата в формате ЧЧ: мм?

C # Код:

String[] HourAndMinute = new String[100];
foreach (DataRow dr in dt.Rows)
{
    HourAndMinute[conta] = dr["StartEnd"].ToString();
    conta++;
}
conta++;
int n = 0;
for (int i = 0; i < conta / 2; i++)
{

    TimeSpan tempoUscita = TimeSpan.Parse(HourAndMinute[i]);
    TimeSpan tempoIngresso = TimeSpan.Parse(HourAndMinute[i + 1]);
    totalSum = totalSum + (tempoUscita - tempoIngresso);
    n++;
}

Totale = "" + totalSum.Hours.ToString().Replace("-", "").ToString() + ":" + totalSum.Minutes.ToString().Replace("-","").ToString();

Запрос Sql:

select FORMAT(DataCreazione,'HH:mm') as StartEnd
from Marcatura
where  (Stato='Enter' or Stato='Exit') 

Таблица Sql Изображение:

enter image description here

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

Поскольку у вас есть записи времени, записанные как DateTime , прочитайте эти как есть (без строки, без формата) и преобразуйте их в TimeSpan :

DateTime[] startEnd = new DateTime[4];

// Read data from table. 
// For demonstration, array is here filled manually with your values:
startEnd[0] = DateTime.Today.AddHours(8).AddMinutes(50);
startEnd[1] = DateTime.Today.AddHours(10).AddMinutes(30);
startEnd[2] = DateTime.Today.AddHours(12).AddMinutes(30);
startEnd[3] = DateTime.Today.AddHours(15).AddMinutes(30);

TimeSpan totalTime = new TimeSpan(0);

// Add/subtract the timespans in pairs.
for (int i = 0; i < 4 ; i += 2)
{
    totalTime += startEnd[i + 1].Subtract(startEnd[i]);
}

// Display totalTime as formatted text.
Console.WriteLine(totalTime.ToString("hh':'mm"));
0 голосов
/ 05 июля 2018
TimeSpan totalSum = TimeSpan.Zero;
foreach (DataRow dr in dt.Rows)
{
    string[] HourAndMinute = dr["StartEnd"].ToString().Split(); //This String contains 08:50 10:30 ...
    TimeSpan tsStart = TimeSpan.Parse(HourAndMinute[0].Trim());
    TimeSpan tsEnd = TimeSpan.Parse(HourAndMinute[1].Trim());
    totalSum += tsEnd - tsStart;
}

Что ж, теперь вы полностью изменили вопрос, сначала StartEnd было 08:50 10:30, теперь каждая запись содержит 08:50 или 10:30. Однако эта модель данных выглядит не очень хорошо ...

TimeSpan totalSum = TimeSpan.Zero;
List<TimeSpan> orderedTimespans = dt.AsEnumerable()
    .Select(r => TimeSpan.Parse(r.Field<string>("StartEnd")))
    .OrderBy(ts => ts)
    .ToList();

for (int index = 0; index < orderedTimespans.Count; index+=2)
{
    TimeSpan tsStart = orderedTimespans[index];
    TimeSpan tsEnd = orderedTimespans[index + 1];
    totalSum += tsEnd - tsStart;
}
...