我正在查询我的数据库,以获得员工的“打卡”、“开始中断”、“结束中断”和“打卡下班”列表。现在我需要计算每个相邻对之间的差值,例如: 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)。
对不起,我想我是太累了,但是我一片空白。
发布于 2019-04-16 06:21:44
是的,你太累了,睡一觉吧!
假设您可以可靠地说您的数组包含连续的打卡/打卡对(或类似的,例如成对的“进入/退出”、“开始/停止”时间等),您还可以假设数组具有偶数个条目(或者,在最坏的情况下,如果在结束时有一个奇数条目,您并不关心它)。
在这种情况下,您只需跳过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);
}如果有不匹配的对,这显然很糟糕:假设某人忘记打卡或两次打卡,或者您使用的查询碰巧选择了“打卡”作为第一次,紧接着是下一个“打卡”-在这种情况下,您将测量打卡时间之间的时间间隔。只需非常小心地对待您正在获取的数据。
如果有一种方法可以提取到单独的数组中用于打卡和打卡,那么这将是一个更健壮的解决方案,但是时间聚合变得更加困难,因为您必须设计特定的规则,以确定如果特定事件丢失或多次发生时会发生什么。但这是另一个问题的讨论,如果它到了那个地步。
https://stackoverflow.com/questions/55697916
复制相似问题