我正面臨一個問題,我無法找到一個適當和優雅的解決方案。我有一個List
的Videos
,這是一個包含有關視頻信息的類。在這些信息中有startDate
,endDate
和cameraId
財產。DateTime處理方法
我當前的數據庫具有以下值:
startDate endDate
我想通過這些值來迭代,並當視頻是從最後一個5分鐘差之內,並且具有相同cameraId
它應該算作一個。但是我找不到一個合適的,不錯的方法來完成這項任務。
上面顯示的視頻列表的輸出應該
- 第一:2013:03:01十八點25分26秒 - > 2013-03-01十八點34分29秒
- 第二:2013 :03:01十八時40分26秒 - > 2013:03:01 18時59分29秒
這是我的代碼至今:
private void ProcessVideos(List<Video> videos)
{
bool isSameVideo = false;
Video lastVideo = null;
//debugar e ver esquema do ultimo valor do database
DateTime startDate = DateTime.MinValue;
DateTime endDate = DateTime.MinValue;
for (int i = 1; i < videos.Count; i++)
{
TimeSpan timeSpan = new TimeSpan(videos[i].DataInicio.Ticks - videos[i - 1].DataFim.Ticks);
if (timeSpan.Minutes > 0 && timeSpan.Minutes < 5 && videos[i].IdCamera == videos[i - 1].IdCamera)
{
if (!isSameVideo)
{
isSameVideo = true;
startDate = videos[i - 1].DataInicio;
endDate = videos[i].DataFim;
}
else
{
endDate = videos[i].DataFim;
}
}
else
{
if (isSameVideo)
{
i++;
isSameVideo = false;
Debug.WriteLine("inicio: {0} fim: {1}", startDate, endDate);
startDate = DateTime.MinValue;
endDate = DateTime.MinValue;
}
Debug.WriteLine("inicio: {0} fim: {1}", videos[i - 1].DataInicio, videos[i - 1].DataFim);
}
}
if (startDate != DateTime.MinValue)
{
Debug.WriteLine("inicio: {0} fim: {1}", startDate, endDate);
}
}
的主要問題是:什麼是一個好的 邏輯來迭代這些值並根據時間跨度規格輸出一組值?
棘手的部分是當你的數據混合。像camera1,camera2,camera1,camera3,camera1。我會用高峯期戰略。期待找到實際的結束日期。然後,您可以添加一個「已使用」的布爾值來「標記」那些已經使用過的布爾值,因此您不會打印重複的內容......您可以刪除列表中的「使用」列表,但從集合中刪除迭代是另一種蠕蟲......注意:在峯值前進時,你只需提前到達峯值,直到你退出5分鐘的窗口然後停止。 – 2013-03-11 12:27:32
只需按日期排序()視頻。現在很簡單。 – 2013-03-11 12:35:48
如果有多臺攝像機,則不需要按日期排序。 – 2013-03-11 12:48:49