我有两个 ArrayList,其中包含包含进入和退出的日期时间
进入时间退出时间
<小时/>- '2018-10-04 07:00:00' '2018-10-04 11:00:00'
- '2018-10-04 08:00:00' '2018-10-04 08:30:00'
- '2018-10-04 09:00:00' '2018-10-04 09:40:00'
- '2018-10-04 10:00:00' '2018-10-04 10:30:00'
入口-导出数据在第一个ArrayList中,2到4的数据是另一个ArrayList。
现在,您在顶部看到的入口/导出 1,我需要将时间分为两部分,因为这是对系统进行的手动输入,我将其存储在第一个数组中,其余部分是系统生成的,位于第二个数组。所以从 2 到 4,我无法更改正确的数据。我只需要更改第一个手动输入的记录。我需要使它们不同且不重叠,我的最终结果将是这样的:
EntryTime ExitTime
- '2018-10-04 07:00:00' '2018-10-04 07:59:00'
- '2018-10-04 08:00:00' '2018-10-04 08:30:00'
- '2018-10-04 09:00:00' '2018-10-04 09:40:00'
- '2018-10-04 10:00:00' '2018-10-04 10:30:00'
- '2018-10-04 08:31:00''2018-10-04 08:59:00'
- '2018-10-04 09:41:00' '2018-10-04 09:59:00'
- '2018-10-04 10:31:00' '2018-10-04 11:00:00'
粗体日期时间(5 到 7,即结果部分)现在变得清晰且不重叠,而第一部分中的数据从 2 到 4 是相同的。更改的值是从 5 到 7。 我无法思考是否应该循环遍历范围并缩短时间。 如果您需要任何其他信息,请帮助并告诉我。 我搜索了足够多的内容,但找不到所需的答案,或者可能是我不明白。
最佳答案
如果 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
是系统生成的列表。
关于java - 通过java分割重叠的小时和分钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53237453/