要查找两个日期范围的重叠并将其合并到JAVA

时间:2016-10-19 14:42:25

标签: java date

我们有特定号码的区块。日期范围,并要求合并每个重叠的块的日期范围,并添加它们的总数量。

考虑以下给定的输入和所需的输出:

输入:

Block 1 -

14/11/2016 - 17/11/2016     ===>  100

18/11/2016 - 20/11/2016     ===>  200

Block 2 -

15/11/2016 - 16/11/2016     ===>  50

17/11/2016 - 20/11/2016     ===>  300

Block 3 -

15/11/2016 - 18/11/2016     ===>  100

19/11/2016 - 20/11/2016     ===>  400

期望的输出:

14/11/2016                  ===> 100

15/11/2016 - 16/11/2016     ===> 250

17/11/2016                  ===> 500

18/11/2016                  ===> 600

19/11/2016 - 20/11/2016     ===> 900

请问您是否有任何java实用程序可以处理这种复杂性。

1 个答案:

答案 0 :(得分:2)

实用程序未知,但您可以使用整数数组计算答案,其中数组索引的数据表示是每天从起点开始的偏移量,然后迭代每个范围并递增值进入数组的相应索引的范围,然后当您完成时,每个索引表示开始日期的偏移日期,值是块中范围的累计值。然后,如果您希望再次使用范围表示输出,则可以逐步浏览内容并根据连续匹配值声明范围的起点和终点。

set start date = day of first entry of first block for each block for each range for each day of range offset = day-of-range - start-date array[offset] += rangeValue

想象一下将时间线堆叠在一起,然后让它们全部投射到一组共同的离散持有者中,这些持有者会聚集每个持有者的价值。

new range(start date, start date) range-value = array[0] for each index in array if array[index] == array[index-1] range-end = startdate+index else new range(startdate+index, startdate+index) range-value = array[index]

不考虑开始或错误陷阱的索引边界。它可能不是最优雅的解决方案,但它应该可以解决您的问题。