计算列表中的时间跨度<>时间戳

时间:2012-04-23 21:01:15

标签: c# list timespan

我有一个清单:

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 个答案:

答案 0 :(得分: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

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