2012-04-23 1 views
0

У меня есть список:Вычислить TimeSpan в List <> штампов времени

List<DateTime> timeStamp; 

позволяет сказать, что список содержит следующие DateTimes:

2006-09-07 11:46:09 
2006-09-07 11:46:19 
2006-09-07 11:46:20 
2006-09-07 11:46:36 

2006-09-07 11:47:49 
2006-09-07 11:47:53 
2006-09-07 11:48:02 
2006-09-07 11:48:15 
2006-09-07 11:48:29 
2006-09-07 11:48:34 

2006-09-07 11:54:29 
2006-09-07 11:54:39 
2006-09-07 11:54:49 
2006-09-07 11:54:59 

2006-09-07 11:56:19 
2006-09-07 11:56:29 
2006-09-07 11:56:39 

2006-09-07 11:58:29 
2006-09-07 11:58:34 
2006-09-07 11:58:45 
2006-09-07 11:58:53 

2006-09-07 12:00:29 
2006-09-07 12:00:39 
2006-09-07 12:00:45 
2006-09-07 12:00:54 
2006-09-07 12:01:03 

Теперь я хочу, чтобы вычислить общее накопленное время. Все эти времена находятся в одном списке, а пробелы представляют собой раздел остановки/запуска. Я также не контролирую интервал времени. Это может быть 10 секунд, это может быть 1 минута. Спасибо за любую помощь!

+1

Какое значение ожидается в указанное вами время? Это 14:54? –

+1

Каковы «пробелы», представленные в списке? Если единственным содержимым списка являются сами метки времени, как потребитель списка может указать, какие интервалы он не должен накапливать? –

+0

У вас есть список образцов, разделенный на разделы, которые, как я полагаю, не находится в фактическом 'List '. Группы не все четные числа DateTimes, поэтому я предполагаю, что мы не можем принимать все как пары старт/стоп. Не могли бы вы пройти через свой список и сказать, что такое ожидаемая сумма, и как это было создано? –

ответ

2

Вот новый ответ, если вы можете определить длину промежутка:

var length = timestamps 
      .Zip(timestamps.Skip(1), (a, b) => b - a)  // pairwise entries and timespan 
      .Where(gap => gap < TimeSpan.FromSeconds(180)) // ignore large gaps 
      .Sum(x => x.TotalMilliseconds);    // total span in ms 

Это работает, проносясь список против себя так, что записи, которые были рядом друг с другом доступны для выбора (т.е. список выбрано «попарно»). Временные шкалы рассчитываются на основе этих данных, и большие интервалы времени (т. Е. Интервалы, которые вы хотите игнорировать) отфильтровываются.

+0

Он будет отсортирован, но это фактически не решает проблему. Если вы заметите пробелы, вы увидите, что есть время от 30 секунд до 6 минут, когда ничего не происходит. Если бы я сделал ваше решение, то время от него было бы включено, и мои вычисления были бы неправильными. – MyCodeSucks

+3

Извините, что такое определение раздела «Старт/Стоп»? Я не вижу ничего, кроме «пробела» - как это представлено в списке? – yamen

+0

Проблема в том, что она не представлена ​​в списке. Все время печатаются вместе. Я только узнал, что к тому времени, когда это произойдет, я действительно узнаю этот интервал. Я думаю об итерировании в списке и поиске пробелов в марках, превышающих интервал, вычислении временного интервала и продолжении повторения следующего разрыва, и просто продолжайте добавлять к совокупному периоду времени. Что-то вроде: ' ', если элемент [6]> интервал от элемента [7], то вычислить время от элемента [1] до элемента [6] ' – MyCodeSucks