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 .