#java #list #date #java-time #datetime-parsing
#java #Список #Дата #java-время #datetime-синтаксический анализ
Вопрос:
Здесь Java необходимо прочитать файл, в котором есть контракт, член, дата начала и дата окончания. Если есть разделение / разрыв дат в датах, его необходимо заполнить в целевом файле на уровне контракта. Ниже приведен пример исходного файла и целевого файла и ожидаемый результат.
В примере контракт 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
Комментарии:
1. Какова логика этих диапазонов?
2. Ну, напишите какой-нибудь код. Например. проверьте, совпадает ли конец одного диапазона с началом следующего диапазона, если нет, то вам нужно вычислить недостающий диапазон. Для анализа и сравнения дат доступно несколько API-интерфейсов date.
3. Должны ли указанные диапазоны не перекрываться (как в примере)?
4. Добро пожаловать в StackOverflow! Ваши вопросы выглядят как проблема «выполнить мою задачу бесплатно». Вам нужно написать код и задавать вопросы, только если вы обнаружите проблему.
Ответ №1:
Следующий диапазон начинается через день после последней даты текущего диапазона. Вы можете перебрать список строк диапазона дат и найти последовательные диапазоны, которые не подчиняются этому правилу. На этом этапе создайте отсутствующий диапазон, используя это правило, и разорвите цикл.
ДЕМОНСТРАЦИЯ:
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