0

我有一个清单:

List<DateTime> timeStamp;

假设该列表包含以下日期时间:

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 分钟。感谢您的任何帮助!

4

1 回答 1

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

这通过将列表压缩到自身来工作,以便彼此相邻的条目可供选择(即,列表被“成对”选择)。时间跨度是从这些计算出来的,并且大的时间跨度(即您想要忽略的时间间隔)被过滤掉。

于 2012-04-23T21:03:12.173 回答