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

时间:2009-06-29 12:52:33

标签: 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;
}

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

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

4 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:2)

您需要查看所有用户组的standard deviation或单个用户的时间间隔中的variance或更好的样本集的两者组合。

答案 2 :(得分:1)

抓住所有时期并查看平均值?如果有些远远超出平均跨度,您可以丢弃它们或使用平均值的调整值。

我同意Groo的说法,只使用基于“保存”时间戳的东西不是你应该做的 - 它永远不会为你提供在任务上花费的实际时间。

答案 3 :(得分:1)

您寻求的聪明数学称为“标准偏差”。