我们如何在 Java 中的日期中实现 Date splits/Break

How can we achieve Date splits/Break in dates in Java

此处Java 需要读取一个包含合同、成员、开始日期和结束日期的文件。如果日期中有日期 split/break,则需要在合同级别的目标文件中填充它。下面提供了源文件和目标文件示例以及预期结果。

在这个例子中, 合同 A 在成员 3 中有拆分,因此在目标文件中需要在合同级别填充剩余日期范围

合同 B 在成员 3 和成员 4 中有拆分,因此在目标文件中需要在合同级别填充缺失的日期范围和剩余的日期范围。

源文件:

Contract  Member    StartDate     EndDate
A           1      01-Jan-2020   31-Dec-2020
A           2      01-Jan-2020   31-Dec-2020
A           3      01-Jan-2020   24-Oct-2020
A           4      01-Jan-2020   31-Dec-2020
                                 
B           1      01-Jan-2020   31-Dec-2020
B           2      01-Jan-2020   31-Dec-2020
B           3      01-Jan-2020   04-Mar-2020
B           3      01-Apr-2020   31-Dec-2020
B           4      01-Jan-2020   04-Mar-2020
B           4      01-Apr-2020   31-Dec-2020

目标文件:

Contract   StartDate      EndDate
A        01-Jan-2020    24-Oct-2020
A        25-Oct-2020    31-Dec-2020
                        
B        01-Jan-2020    04-Mar-2020
B        05-Mar-2020    31-Mar-2020
B        01-Apr-2020    31-Dec-2020

下一个范围从当前范围的最后一个日期后一天开始。您可以迭代日期范围字符串列表并找到不遵守此规则的连续范围。此时,使用此规则创建缺失范围并打破循环。

演示:

import java.time.LocalDate;
import java.util.List;

class Main {
    public static void main(String[] args) {
        List<String> dateRangeList = List.of("2019-01-01 2019-02-01", "2019-02-02 2019-04-04", "2019-06-01 2019-07-01");
        for (int i = 0; i < dateRangeList.size() - 1; i++) {
            String[] currentRange = dateRangeList.get(i).split(" ");
            String[] nextRange = dateRangeList.get(i + 1).split(" ");
            LocalDate oneDayAfterLastDateOfCurrentRange = LocalDate.parse(currentRange[1]).plusDays(1);
            LocalDate firstDateOfNextRange = LocalDate.parse(nextRange[0]);
            if (!oneDayAfterLastDateOfCurrentRange.equals(firstDateOfNextRange)) {
                String missingDateRange = oneDayAfterLastDateOfCurrentRange.toString() + " "
                        + firstDateOfNextRange.minusDays(1);
                System.out.println("The missing date range is: " + missingDateRange);
                break;
            }
        }
    }
}

输出:

The missing date range is: 2019-04-05 2019-05-31