Это немного сложнее, чем это (не плохо).
String i1StartStr = "2020-01-05";
String i1EndStr = "2020-03-31";
String i2StartStr = "2020-01-05";
String i2EndStr = "2020-03-20";
LocalDate i1Start = LocalDate.parse(i1StartStr);
LocalDate i1End = LocalDate.parse(i1EndStr);
LocalDate i2Start = LocalDate.parse(i2StartStr);
LocalDate i2End = LocalDate.parse(i2EndStr);
if (i1End.isBefore(i1Start) || i2End.isBefore(i2Start)) {
System.out.println("Not proper intervals");
} else {
long numberOfOverlappingDates;
if (i1End.isBefore(i2Start) || i2End.isBefore(i1Start)) {
// no overlap
numberOfOverlappingDates = 0;
} else {
LocalDate laterStart = Collections.max(Arrays.asList(i1Start, i2Start));
LocalDate earlierEnd = Collections.min(Arrays.asList(i1End, i2End));
numberOfOverlappingDates = ChronoUnit.DAYS.between(laterStart, earlierEnd);
}
System.out.println("" + numberOfOverlappingDates + " days of overlap");
}
Вывод из кода в том виде, в котором он здесь представлен:
75 дней перекрытия
Я также использовал более подходящие имена переменных и ввел проверку интервалов, которые вводит пользователь.
Я знаю, что должен был добавить здесь некоторые пояснения, но, честно говоря, я нашел код, использующий java. Время настолько ясное, чтобы читать само по себе, я не знаю, что нужно объяснять. Если вы хотите, чтобы количество дней включало даты начала и окончания, не забудьте добавить 1 к возвращаемому значению от ChronoUnit.DAYS.between()
. Пожалуйста, следите за комментариями и дайте мне знать, какое дальнейшее объяснение будет уместным.