Перейти к основному содержимому

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

· 2 мин. чтения

Задача: Наибольшая подстрока без повторений

Для заданной строки s, найдите длину наибольшей подстроки без повторяющихся символов. Подстрока — это непрерывная непустая последовательность символов внутри строки...

ANDROMEDA 42

1. Обзор

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

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

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

В этом методе мы продолжаем добавлять один день к объекту LocalDate , пока не добавим необходимое количество дней. При добавлении дня мы проверяем, является ли день нового экземпляра 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 , чтобы добавить дни к объекту результата . Мы увеличиваем переменную addDays только тогда, когда день является будним. Когда переменная addDays равна переменной 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;
}

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

4. Вывод

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

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