Рубрики
Без рубрики

Пропуск выходных При добавлении дней к локальной дате в Java 8

Узнайте, как добавить дни в LocalDate Java 8, пропуская выходные

Автор оригинала: baeldung.

1. Обзор

В этом уроке мы кратко рассмотрим алгоритм пропуска выходных при добавлении дней в экземпляр LocalDate в Java 8.

Мы также рассмотрим алгоритм для вычитания дней из LocalDate объекта, пропуская выходные.

2. Добавление Дней

В этом методе мы продолжаем добавлять один день к объекту Local Data до тех пор, пока не добавим необходимое количество дней. При добавлении дня мы проверяем, является ли день нового экземпляра LocalDate субботой или воскресеньем .

Если проверка возвращает true , то мы не увеличиваем счетчик на количество дней, добавленных до этого момента. Однако, если текущий день является будним днем, то мы увеличиваем счетчик.

Таким образом, мы продолжаем добавлять дни до тех пор, пока счетчик не станет равным количеству дней, которые должны быть добавлены:

public static LocalDate addDaysSkippingWeekends(LocalDate date, int days) {
    LocalDate result = date;
    int addedDays = 0;
    while (addedDays < days) {
        result = result.plusDays(1);
        if (!(result.getDayOfWeek() == DayOfWeek.SATURDAY || result.getDayOfWeek() == DayOfWeek.SUNDAY)) {
            ++addedDays;
        }
    }
    return result;
}

В приведенном выше коде мы используем метод plusDays() объекта LocalDate для добавления дней к объекту result . Мы увеличиваем переменную added Days только тогда, когда этот день является будним днем. Когда переменная добавленные дни равна дням переменной, мы прекращаем добавлять день в результат | LocalDate объект.

3. Вычитание Дней

Аналогично, мы можем вычесть дни из объекта LocalDate , используя метод minusDays () , пока не вычтем необходимое количество дней.

Для достижения этой цели мы будем хранить счетчик для количества вычитаемых дней, который увеличивается только тогда, когда результирующий день является днем недели :

public static LocalDate subtractDaysSkippingWeekends(LocalDate date, int days) {
    LocalDate result = date;
    int subtractedDays = 0;
    while (subtractedDays < days) {
        result = result.minusDays(1);
        if (!(result.getDayOfWeek() == DayOfWeek.SATURDAY || result.getDayOfWeek() == DayOfWeek.SUNDAY)) {
            ++subtractedDays;
        }
    }
    return result;
}

Из приведенной выше реализации мы видим, что вычитаемые дни увеличиваются только тогда, когда объект result LocalDate является днем недели. Используя цикл while, мы вычитаем дни до тех пор, пока вычитаемые дни не будут равны переменной days .

4. Заключение

В этой краткой статье мы рассмотрели алгоритмы добавления дней и вычитания дней из LocalDate object пропуска выходных. Кроме того, мы рассмотрели их реализации на Java.

Как всегда, полный исходный код рабочих примеров доступен на GitHub .