首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何计算时间列表(“时钟”)相邻值的差值之和?

如何计算时间列表(“时钟”)相邻值的差值之和?
EN

Stack Overflow用户
提问于 2019-04-16 06:14:08
回答 1查看 39关注 0票数 1

我正在查询我的数据库,以获得员工的“打卡”、“开始中断”、“结束中断”和“打卡下班”列表。现在我需要计算每个相邻对之间的差值,例如: totalTime=(t4-t3)+(t2-t1),我似乎无法理解它:(

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

代码语言:javascript
运行
复制
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)

对不起,我想我是太累了,但是我一片空白。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-16 06:21:44

是的,你太累了,睡一觉吧!

假设您可以可靠地说您的数组包含连续的打卡/打卡对(或类似的,例如成对的“进入/退出”、“开始/停止”时间等),您还可以假设数组具有偶数个条目(或者,在最坏的情况下,如果在结束时有一个奇数条目,您并不关心它)。

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

代码语言:javascript
运行
复制
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);
}

如果有不匹配的对,这显然很糟糕:假设某人忘记打卡或两次打卡,或者您使用的查询碰巧选择了“打卡”作为第一次,紧接着是下一个“打卡”-在这种情况下,您将测量打卡时间之间的时间间隔。只需非常小心地对待您正在获取的数据。

如果有一种方法可以提取到单独的数组中用于打卡和打卡,那么这将是一个更健壮的解决方案,但是时间聚合变得更加困难,因为您必须设计特定的规则,以确定如果特定事件丢失或多次发生时会发生什么。但这是另一个问题的讨论,如果它到了那个地步。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55697916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档