Olá pessoal!
Acho que me empolguei um pouco mas segue minha solução e também serve para calcular idade com precisão!
Utilizado IntelliJ IDEA 2025.3.3 com OpenJDK-23.
do {
IO.println();
DateTimeFormatter formatoData = DateTimeFormatter.ofPattern("d-M-yyyy");
LocalDate dataVencimento;
int avisoAntecipado;
try {
IO.print("Digite a data de vencimento (d/m/aaaa): ");
dataVencimento = LocalDate.parse(leitura.nextLine().replace(("/"), "-"), formatoData);
IO.print("Digite com quantos dias de antecedência você deve ser avisado: ");
avisoAntecipado = leitura.nextInt();
leitura.nextLine();
} catch (DateTimeParseException | InputMismatchException erro) {
IO.println("Entrada inválida, programa finalizado!");
break;
}
Period periodo = Period.between(LocalDate.now(), dataVencimento);
if (periodo.getYears() == 0 && periodo.getMonths() == 0 && periodo.getDays() <= avisoAntecipado) {
IO.println("\nAviso do dia " + LocalDate.now().format(formatoData));
IO.println("Data de vencimento da sua conta: " + dataVencimento.format(formatoData));
if (!(periodo.getDays() < 1)) {
IO.println("Atenção! Você só tem " + periodo.getDays() + " dias para pagar antes do vencimento");
} else {
IO.println("Atenção! Sua conta já venceu há " + Math.abs(periodo.getDays()) + " dias!");
}
}
if (periodo.isNegative()) {
IO.println("\nIsso foi há " + Math.abs(periodo.getYears()) +
" anos, " + Math.abs(periodo.getMonths()) +
" meses e " + Math.abs(periodo.getDays()) + " dias");
}else {
IO.println("\nIsso será daqui a " + periodo.getYears() +
" anos, " + periodo.getMonths() +
" meses e " + periodo.getDays() + " dias");
}
} while(true);