如何对时间列表(“时间时钟”)的相邻值中的差异求和?

时间:2019-04-15 22:14:08

标签: c# datetime timespan

我正在查询数据库以获取“事件”列表,例如打入,开始休息,结束休息,为员工打孔。现在,我需要对每个相邻对之间的差异求和,例如:totalTime =(t4-t3)+(t2-t1),而我似乎无法绕开它:(

到目前为止,我尝试过的是:

TimeSpan totalTime = new TimeSpan();

for (int i = 0; i < worked.Count - 1; i++)
{
    totalTime = totalTime.Add(worked[i + 1].Time - worked[i].Time);
}

哪个给我(不足为奇)每个连续对中的差异总数,所以:totalTime = (t4 - t3) + (t3 - t2) + (t2 - t1)

对不起,我想我已经很劳累了,可是空白了。

1 个答案:

答案 0 :(得分:1)

是的,您太累了,睡一觉! :D

假设您可以可靠地说阵列包含连续的时钟输入/时钟输出对(或类似的对,例如,成对的“输入/退出”,“开始/停止”时间等),则还可以假定数组具有偶数个条目(或者,在最坏的情况下,如果结尾处有一个奇数条目,您根本不在乎它)。

在这种情况下,您只需要跳过2:

TimeSpan totalTime = new TimeSpan();

for (int i = 0; i < worked.Count - 1; i += 2) // Notice we're incrementing by 2 now
{
    totalTime = totalTime.Add(worked[i + 1].Time - worked[i].Time);
}

如果您的配对不匹配,这显然会带来惨痛的后果:说某人忘记了超时或两次超时,或者您使用的查询碰巧是第一次选择“超时”,然后是下一个“时钟输入”-在这种情况下,您将测量 之间的时钟输入时间。请非常小心要获取的数据。

如果有一种方法可以提取到进出时钟的单独数组中,那将使解决方案更加健壮,但是时间汇总会变得困难得多,因为您必须设计有关发生以下情况的具体规则:特定事件丢失或成倍出现。但这是对另一个问题的讨论。