1
resposta

Minha solução para apreciação!

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);
1 resposta

Oi, José! Como vai?

Gostei bastante da forma como você utilizou LocalDate, Period e também do tratamento de exceções com try e catch. Do jeito que você explicou, fica claro que você pensou além da atividade ao incluir o cálculo detalhado do tempo em anos, meses e dias. Esse tipo de exploração mostra curiosidade e ajuda muito a entender melhor a API de datas do Java.

Uma dica interessante para o futuro é utilizar o metodo ChronoUnit quando quiser calcular diferencas especificas entre datas, como dias exatos entre duas datas. Veja este exemplo:


import java.time.LocalDate;
import java.time.temporal.ChronoUnit;

LocalDate hoje = LocalDate.now();
LocalDate vencimento = LocalDate.of(2026, 4, 10);

long dias = ChronoUnit.DAYS.between(hoje, vencimento);

System.out.println("Faltam " + dias + " dias para o vencimento");

Esse codigo calcula diretamente a quantidade de dias entre duas datas, o que pode ajudar quando voce precisar apenas do total de dias em vez de separar em anos, meses e dias.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!