2014-09-19 7 views
0

У меня есть 10 записей в моей базе данных со временем начала и окончания. Мне удалось вычислить значение продолжительности с функцией SUBTRACT. Теперь я запускаю цикл, и я хочу рассчитать общее количество отработанных часов от значения продолжительности (или начального и конечного значения).Рассчитать количество отработанных часов от 10 значений длительности в C#

Я пробовал функцию AddHours и Add, но ее даю ошибку. Не уверен, что я использую ее правильно или нет.

Datetime TotalHours = TotalHours.add(Duration) 

Datetime TotalHours = TotalHours.addHours(Duration) 

это, что я сделал. Дает подтверждение на конверсию.

Я пробовал написать функцию, которая вручную вычисляет время, добавляя от 60 минут до часа и сына, но должен быть более простой способ сделать это.

+0

Что такое 'TotalHours' и' Duration' точно? И поскольку C# чувствителен к регистру, они, вероятно, являются «Добавить» и «AddHours». –

ответ

1

Если предположить, что Duration является TimeSpan:

var durations = .... 
var total = new TimeSpan(); 
foreach (var duration in durations) // assuming durations is a collection of all the durations you have calculated 
    total = total.Add(duration); 

Console.WriteLine(total.Hours); // "whole" hours, try TotalHours for fractional 

Console.WriteLine((int)total.TotalHours); // whole amount of total hours, ie 1 day + 3 h = 27 h 
+0

Огромное, что я хотел ... он работал как шарм. Спасибо –

+0

thats отлично работает, но есть одна небольшая проблема. Поэтому, когда общее количество часов превышает более чем 24, тогда это дает мне значение как 1.03: 00: 00, что составляет один день. Три наших: нулевые минуты: ноль сек. Теперь я сделал строку разделения и смог отобразить общее количество часов на 1 * 24 часа плюс 3 часа, но было интересно, есть ли какой-либо способ в вышеприведенном коде, мы можем это сделать? Благодарю. –

+1

@arpanshah См. Мое редактирование. – flindeberg

0

От того, что вы говорите, вы хотите No of Hours. Subtract возвращает Timespan. Timespan имеет свойство Hours. Это даст вам количество пройденных часов.

var TotalHours = Duration.Hours; 
1

Вы можете просто использовать экземпляр TimeSpan аккумулировать все длительности.

Например:

var durations = // Your collection of TimeSpan items goes here. 

var totalDuration = new TimeSpan(); 

foreach (var duration in durations) 
    totalDuration += duration; 

double totalHours = totalDuration.TotalHours; // Note: Includes fractional hours. 
+0

Спасибо! у вас есть то же самое решение, что и flindeberg. в конце я конвертирую общее количество часов в строке для отображения, поэтому не требовалось преобразовать его в двойное. –

0

Использование TimeSpan класса, например:

public class FromTo 
{ 
    public DateTime From {get; set;} 
    public DateTime To {get; set;} 
    //other properties of your class 
} 

Теперь получить список ваших объектов с даты начала и окончания. После этого вы можете добавить результат в цикл:

public TimeSpan CalculateWorkTime(List<FromTo> fromto) 
{ 
    TimeSpan sum = new TimeSpan(); 
    fromto.ForEach(p => 
    { 
     sum += (p.To - p.From); 
    }); 
    return sum; 
} 

Сообщите мне, если это сработает. С уважением;)

Смежные вопросы