我们如何在 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
此处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