Skip to content

Instantly share code, notes, and snippets.

@isicju
Last active March 5, 2024 12:59
Show Gist options
  • Save isicju/cc8ac5adaee19390e116743040799386 to your computer and use it in GitHub Desktop.
Save isicju/cc8ac5adaee19390e116743040799386 to your computer and use it in GitHub Desktop.
Ищем предыдущий будний, не праздничный день.
Напишите функцию которая вовращает предыдущий к текущей дате будний день.
Если предыдущий будний день - праздник то нужно вернуть предыдущий до него но также он должен быть будним днем.
Например для 2 марта 2023 (суббота) должен быть возвращено 1 марта (пятница).
Тот же случай с 2 марта 2023 должен вернуть четверг если 1 марта будет праздничным днем.
Вот сигнатура метода
Сигнатура с датой не уточнена, вы вольны сами решать какой именно формат даты передается и возвращается.
public Date getPreviousWeekDay(Date date, List<Date> publicHolidays){
//implementation.
}
@alexey168
Copy link

alexey168 commented Mar 5, 2024

one more solution
private static final EnumSet<DayOfWeek> WEEKEND_DAYS = EnumSet.of(DayOfWeek.SATURDAY, DayOfWeek.SUNDAY);

    public LocalDate getPreviousWeekDay(LocalDate date, List<LocalDate> publicHolidays) {
        date = getPreviousDay(date);
        DayOfWeek dayOfWeek = date.getDayOfWeek();
        while (WEEKEND_DAYS.contains(dayOfWeek) || publicHolidays.contains(date)) {
            date = getPreviousDay(date);
            dayOfWeek = date.getDayOfWeek();
        }
        return date;
    }
    private LocalDate getPreviousDay(LocalDate date){
        return date.minusDays(1);
    }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment