Ignorando fins de semana ao adicionar dias ao LocalDate no Java 8

Ignorando fins de semana ao adicionar dias ao LocalDate no Java 8

1. Visão geral

Neste tutorial, veremos brevemente o algoritmo para a instânciaskip weekends while adding days to a LocalDate em Java 8.

Também passaremos pelo algoritmo parasubtract days from LocalDate object whilst skipping weekends.

2. Adicionando dias

Nesse método, continuamos adicionando um dia ao objetoLocalDate até adicionarmos o número de dias necessário. Ao adicionar um dia,we check whether the day of the new LocalDate instance is a Saturday or a Sunday.

Se a verificação retornartrue, então não incrementamos o contador para o número de dias adicionados até aquele ponto. No entanto, se o dia atual for um dia da semana, aumentamos o contador.

Dessa forma, continuamos adicionando dias até que o contador seja igual ao número de dias que devem ser adicionados:

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;
}

No código acima, usamos o métodoplusDays() do objetoLocalDate para adicionar dias ao objetoresult. Incrementamos a variáveladdedDays apenas quando o dia é um dia de semana. Quando a variáveladdedDays é igual à variáveldays, paramos de adicionar um dia ao objetoresultLocalDate.

3. Subtraindo dias

Da mesma forma, podemos subtrair dias do objetoLocalDate usando o métodominusDays() até que tenhamos subtraído o número necessário de dias.

Para conseguir isso,we’ll keep a counter for the number of days subtracted that is incremented only when the resulted day is a weekday:

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;
}

A partir da implementação acima, podemos ver quesubtractedDays  só é incrementado quando o objetoresult LocalDate é um dia da semana. Usando o loop while, subtraímos dias até quesubtractedDays seja igual à variáveldays.

4. Conclusão

Neste breve artigo, nóslooked at algorithms for adding days to and subtracting days from LocalDate object pulando fins de semana. Além disso, vimos suas implementações em Java.

Como sempre, o código-fonte completo dos exemplos de trabalho está disponívelover on GitHub.