如何计算时间戳的时间跨度?

vav*_*ava 0 math

我在工作中有一项非常有趣的任务 - 我需要知道用户花多少时间做某事,而我所拥有的只是他积蓄的时间戳.我知道一个事实,即用户在每一小部分工作后都会保存,因此它们相距甚远.

显而易见的解决方案是找出一个小项目可能花费多少时间,然后只是通过已排序的时间戳,如果当前一个和前一个之间的差异大于此值,则意味着用户有一个喝咖啡休息时间,如果是更少,我们可以将这个差异加到总和中.简单的示例代码来说明:

var prev_timestamp = null;
var total_time = 0;
foreach (timestamp in timestamps) {
    if (prev_timestamp != null) {
         var diff = timestamp - prev_timestamp;
         if (diff < threshold) {
              total_time += diff;
         }
    }
    prev_timestamp = timestamp;
}
Run Code Online (Sandbox Code Playgroud)

问题是,虽然我知道在一小部分上花了多少时间,但我不想依赖它.如果某个用户比我的预测慢得多,我不希望他没有薪水.所以我在想,这个问题能否有一些聪明的数学解决方案,可以在不知道什么时间间隔可以接受的情况下工作?

PS.很抱歉误会,当然没有人会根据这些数字向人们付款,即使他们愿意,他们也明白这只是一个近似值.但是我想找到一种能够尽可能接近现实生活的解决方案.

Gro*_*roo 5

您可以获得TimeSpan的中位数,然后丢弃那些关闭的TimeSpans,比如说> 50%.

但是这个算法应该只用于获得每个项目的估计花费时间,而不是工资单.