如何仅使用时间戳获取占用的时间量?

时间:2011-10-24 18:50:08

标签: java

我有一堆时间戳,上面印有适用的操作(弯曲,激光等)我有一天工作时间(16小时,或特定时间,如凌晨2:30 - 晚上11:00)

基于该操作的一堆时间戳(包含开始和结束时间)以及用户使用它,如何确定我们打开的18小时,该机器运行的小时数?

我提交了时间上所有差异的总和,但显然想要的是比较每个时间戳并发现小时未被占用,例如,如果2-10是我们打开并且有一个批次运行从2-4开始,另一个从3-4开始,我们无人居住了6个小时。

这是可能的,如果是的话,怎么样?

2 个答案:

答案 0 :(得分:1)

大概是结束时间和开始时间配对。

最简单的:

busy =每项活动的所有(结束时间 - 开始时间)的总和。

拿2:

  1. 创建一个代表TimeSpan的类(具有开始时间和结束时间)。
  2. 为TimeSpan类实现一个按开始时间排序的比较器。
  3. 运行您的开始和结束时间对列表,并为每个对创建一个TimeSpan,将其添加到列表中。
  4. 使用TimeSpan比较器对列表进行排序。
  5. 运行列表(一次)并合并任何重叠的时间跨度。重叠==如果第二个TimeSpan的开始时间小于第一个时间戳的结束时间,则重叠。
  6. 要创建合并的TimeSpan,开始时间是第一个TimeStamp的开始时间,结束时间是以后的结束时间(例如。第一个结束时间是2p,第二个结束时间是2:01p,第二个结束)时间是合并的TimeSpan的结束时间)。
  7. 运行列表并合并跨度后,跨度未涵盖的任何时间都表示未使用的时间。

答案 1 :(得分:0)

这两种方式之间没有算术上的区别。同一事件的开始和结束之间的时间戳增量之和是使用的时间,然后从总时间中减去该时间给出未使用的时间。或者,从一个事件的结束时间到下一个事件的开始时间的增量之和是未使用的时间,然后从总时间中减去该时间给出所用的时间。答案是一样的。