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.