2012-04-23 158 views
0

我有一個列表:計算時間跨度

List<DateTime> timeStamp; 

比方說,該列表包含以下DateTime是否:

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嗎? – 2012-04-23 21:06:58

+1

列表中的「空白」如何表示?如果列表中唯一的內容是時間戳本身,那麼列表中的消費者如何知道它不能累積的時間間隔? – 2012-04-23 21:09:10

+0

你已經把你的樣本列表分成了幾個部分,我假設這些部分不在實際的'List '中。這些組並不都是偶數的DateTime,所以我認爲我們不能把所有的東西都當作開始/停止對。你能通過你的名單,並說出預期的總數是多少,以及這是怎麼產生的? – 2012-04-23 22:11:46

回答

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 2012-04-23 21:05:38

+3

對不起,開始/停止部分的定義是什麼?除了'缺口'之外,我無法看到它 - 列表中是如何表示的? – yamen 2012-04-23 21:07:40

+0

問題是它沒有真正代表列表中。所有時間戳都在一起。我發現在這個問題出現之前,我確實會知道這個間隔。我正在考慮迭代整個列表,並在郵票中查找大於間隔的間隙,計算時間間隔,並繼續迭代到下一個間隔,並繼續添加到累計時間間隔。例如: ' if element [6]>從元素[7]開始間隔然後從 計算從元素[1]到元素[6]的時間' – MyCodeSucks 2012-04-23 21:13:01