我有一个清单:
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分钟。感谢您的帮助!
答案 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
这通过将列表压缩为自身来工作,以便彼此相邻的条目可供选择(即列表被选择为“成对”)。时间跨度是根据这些来计算的,并且过滤掉了大的时间跨度(即您想要忽略的间隔)。