通过Java拆分重叠的小时和分钟

时间:2018-11-10 09:01:48

标签: java date datetime

我有两个ArrayList,其中的日期时间包含进入和退出的时间

EntryTime退出时间


  1. '2018-10-04 07:00:00''2018-10-04 11:00:00'
  2. '2018-10-04 08:00:00''2018-10-04 08:30:00'
  3. '2018-10-04 09:00:00''2018-10-04 09:40:00'
  4. '2018-10-04 10:00:00''2018-10-04 10:30:00'

Entry-Exit数据在第一个ArrayList中,而2到4之间的数据是另一个ArrayList。

现在,您在顶部1处看到的入口出口,我需要将该时间分叉,因为那是对我要存储在第一个数组中的系统的手工输入,其余部分是系统生成的,它们位于第二个数组。所以从2到4,我无法更改正确的数据。我只需要更改第一条记录,即手动输入。我需要使它们与众不同且不重叠,最终结果将如下所示:

   EntryTime                     ExitTime
  1. '2018-10-04 07:00:00''2018-10-04 07:59:00'
  2. '2018-10-04 08:00:00''2018-10-04 08:30:00'
  3. '2018-10-04 09:00:00''2018-10-04 09:40:00'
  4. '2018-10-04 10:00:00''2018-10-04 10:30:00'
  5. '2018-10-04 08:31:00''2018-10-04 08:59:00'
  6. '2018-10-04 09:41:00''2018-10-04 09:59:00'
  7. '2018-10-04 10:31:00''2018-10-04 11:00:00'

加粗的DateTime(结果部分中的5到7)现在变得不同且不重叠,而第一部分中的数据从2到4相同。更改后的值从5到7。 我无法考虑是否应该遍历范围并减少时间。 请帮助并告诉我是否需要其他信息。 我进行了足够的搜索,但是找不到所需的答案,或者可能是我听不懂。

1 个答案:

答案 0 :(得分:1)

如果按时间顺序对2-4个条目进行排序,则可以循环浏览系统生成的条目,对于i-th位置,您可以检查i-th之间(当前条目)退出日期和i+1-th(下一个)条目日期(如果有),然后检查另一个ArrayList,以查看是否有条目在“空白”之前开始并在“间隙”之后结束您在系统生成的ArrayList中找到了。

伪代码:

for(int i=0; i<arrayList2.size()-1; i++){

  if(arrayList2[i].exitDate is_before arrayList2[i+1].entryDate){

    fillTheGapIfPossible(arrayList2[i], arrayList2[i+1]);

  }

} 

fillTheGapIfPossible(entry1, entry2){

  for(int i=0; i<arrayList1.size(); i++){

    if(arrayList1[i].entry is_before entry1.exitDate &&
       arrayList1[i].exitDate is_after entry2.entryDate){

         makeNewEntry(entry1.exitDate, entry2.entryDate);

    }

  }

}

arrayList2是系统生成的列表。