1
resposta

Exercício 07

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

public class Exercicios {
    public static void main(String[] args) {
        LocalDate dataVencimento = LocalDate.of(2026,05,29);
        LocalDate avisoDeVencimento = dataVencimento.minusDays(5);
        DateTimeFormatter formato = DateTimeFormatter.ofPattern("dd-MM-yyyy");

        System.out.println("Data do lembrete: " + avisoDeVencimento.format(formato));
    }
}
1 resposta

Olá, Bernardo. Como vai?

Parabéns por mais uma resolução perfeita! O seu código para o Exercício 7 está totalmente correto e a lógica foi muito bem aplicada.

A escolha do método .minusDays(5) foi cirúrgica. Assim como vimos no conceito de imutabilidade com o plusMonths(), o método minusDays() realiza a subtração dos dias de forma segura, calculando os retrocessos de datas (inclusive cuidando automaticamente de viradas de meses ou anos bissextos, se fosse o caso) e gerando um novo objeto com o resultado.

Uma curiosidade prática sobre o seu teste

Um detalhe muito legal do seu exercício é que você configurou a dataVencimento para o dia 29/05/2026.

Como hoje é dia 22/05/2026, o seu programa calculou que o lembrete deveria ser disparado no dia 24/05/2026 (29 - 5). Isso significa que, em um cenário de um sistema real, o seu alerta de pagamento rodaria daqui a exatamente dois dias!

Para agregar ainda mais valor ao seu código e trazer uma sugestão de boa prática voltada para sistemas financeiros e de faturamento, separei uma dica sobre como tornar essa regra de lembrete dinâmica:

Sugestão de Boa Prática: Evitando "Hardcoding" (Valores Fixos)

No seu código, o número de dias de antecedência foi inserido de forma fixa diretamente dentro do método: .minusDays(5). No jargão da programação, chamamos isso de hardcoding.

Em sistemas corporativos, a quantidade de dias para o aviso prévio de um boleto pode mudar de acordo com o cliente ou por decisões de negócio (mudar de 5 para 3 dias, por exemplo). Uma boa prática é isolar esse valor em uma variável ou constante bem nomeada no início do método. Isso torna o seu código muito mais legível e infinitamente mais fácil de dar manutenção.

Veja como o seu script ficaria aplicando essa boa prática e padronizando as barras no formato da data:

LocalDate dataVencimento = LocalDate.of(2026, 05, 29);

// Isolando a regra de negócio em uma variável explicativa
int diasAntecedenciaParaAviso = 5;
LocalDate avisoDeVencimento = dataVencimento.minusDays(diasAntecedenciaParaAviso);

// Formato com barras, padrão para boletos e documentos no Brasil
DateTimeFormatter formato = DateTimeFormatter.ofPattern("dd/MM/yyyy");

System.out.println("Data de Vencimento do Boleto: " + dataVencimento.format(formato));
System.out.println("Data de Disparo do Lembrete:  " + avisoDeVencimento.format(formato));

Com essa pequena alteração, se o Gerente de Finanças decidir alterar o prazo de aviso amanhã, você só precisa mexer em um único número bem no topo do código, sem precisar caçar a regra dentro dos métodos de data!

Você está dominando completamente a API de tempo do Java. Parabéns pela consistência e continue assim!

Espero que possa ter lhe ajudado!