public static void main(String[] args) {
List<String> isHolidays = Arrays.asList(
"2023-12-31",
"2023-04-29",
"2023-04-05",
"2023-06-24",
"2023-06-23",
"2023-06-22",
"2023-09-30",
"2023-10-01",
"2023-01-27",
"2023-01-26",
"2023-01-21",
"2023-01-25",
"2023-05-01",
"2023-09-29",
"2023-01-02",
"2023-01-24",
"2023-01-01",
"2023-01-23",
"2023-05-03",
"2023-01-22",
"2023-05-02",
"2023-10-03",
"2023-10-02",
"2023-04-30",
"2023-10-05",
"2023-10-04",
"2023-10-06");
List<String> isNotHolidays = Arrays.asList(
"2023-04-23",
"2023-06-25",
"2023-01-29",
"2023-01-28",
"2023-05-06",
"2023-10-07",
"2023-10-08");
System.out.println(subtractDays(LocalDate.parse("2023-06-27"), 3, isHolidays, isNotHolidays));
System.out.println(plusDays(LocalDate.parse("2023-06-27"), 2, isHolidays, isNotHolidays));
}
public static LocalDate subtractDays(LocalDate date, int time, List<String> isHolidays, List<String> isNotHolidays) {
LocalDate newDate = date.minusDays(1);
if (isHolidays.contains(newDate.toString())) {
time++;
} else if (!isNotHolidays.contains(newDate.toString()) && (newDate.getDayOfWeek() == DayOfWeek.SATURDAY || newDate.getDayOfWeek() == DayOfWeek.SUNDAY)) {
time++;
}
if (time == 1) {
return newDate;
}
return subtractDays(newDate, time - 1, isHolidays, isNotHolidays);
}
public static LocalDate plusDays(LocalDate date, int time, List<String> isHolidays, List<String> isNotHolidays) {
LocalDate newDate = date.plusDays(1);
if (isHolidays.contains(newDate.toString())) {
time++;
} else if (!isNotHolidays.contains(newDate.toString()) && (newDate.getDayOfWeek() == DayOfWeek.SATURDAY || newDate.getDayOfWeek() == DayOfWeek.SUNDAY)) {
time++;
}
if (time == 1) {
return newDate;
}
return plusDays(newDate, time - 1, isHolidays, isNotHolidays);
}