这里Java需要读取一个包含Contract、Member、Start Date和End Date的文件。如果存在日期拆分/磨合日期,则需要将其填充到合同级别的目标文件中。下面提供了源文件和目标文件示例以及预期结果。
在该示例中,合同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