Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Socorro @deus

Fui inventar de adicionar um contador pra exibir há quanto tempo o evento ocorreu, e me vi embolado num nó de ifs. Parece que uma solução mais prática é inserir ternários, mas ainda não sei trabalhar com isso, então deixei assim por enquanto, e serviu como um pouco mais de prática. Também faltou editar a mensagem para adicionar "e" e vírgula quando tem anos e meses, por exemplo: O evento ocorreu há: 1 ano, 2 meses e 3 dias. Mas já tá bom assim kkkk

package br.com.ddmdros.datahora.exercicios;

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

public class alura6 {
    public static void main(String[] args) {
        LocalDate dataEvento = LocalDate.of(2025,3,10);
        LocalDate hoje = LocalDate.now();
        DateTimeFormatter formato = DateTimeFormatter.ofPattern("dd/MM/yyyy");

        System.out.println("Data do evento: " + dataEvento.format(formato));
        System.out.println("Data atual: " + hoje.format(formato));
        //long diasPassados = java.time.temporal.ChronoUnit.DAYS.between(dataEvento,hoje);
        Period period = Period.between(dataEvento,hoje);

        String mensagemEventoPassou = "O evento ocorreu há ";

        if (dataEvento.isAfter(hoje)){
            System.out.println("O evento ainda não aconteceu");
        } else if (dataEvento.isEqual(hoje)){
            System.out.println("O evento é HOJE!");
        } else {
            if (period.getYears() >0) {
                mensagemEventoPassou += period.getYears() + " ano(s) ";
            }
            if (period.getMonths() >0){
                mensagemEventoPassou += period.getMonths() + " mes(es) ";
            }
            if (period.getDays() > 0){
                mensagemEventoPassou += period.getDays() + " dia(s)";
            }
            System.out.println(mensagemEventoPassou.trim());

        }
    }
}
2 respostas
solução!

Olá Diogo! Como vai?

A ideia de usar operadores ternários pode ajudar a simplificar o código, mas é importante usá-los com cuidado para não perder a clareza.

Para resolver o problema de exibir a mensagem corretamente com "e" e vírgulas, você pode construir a mensagem de forma dinâmica. Vou te mostrar uma maneira de fazer isso:

package br.com.ddmdros.datahora.exercicios;

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

public class alura6 {
    public static void main(String[] args) {
        LocalDate dataEvento = LocalDate.of(2025,3,10);
        LocalDate hoje = LocalDate.now();
        DateTimeFormatter formato = DateTimeFormatter.ofPattern("dd/MM/yyyy");

        System.out.println("Data do evento: " + dataEvento.format(formato));
        System.out.println("Data atual: " + hoje.format(formato));

        Period period = Period.between(dataEvento,hoje);

        if (dataEvento.isAfter(hoje)){
            System.out.println("O evento ainda não aconteceu");
        } else if (dataEvento.isEqual(hoje)){
            System.out.println("O evento é HOJE!");
        } else {
            StringBuilder mensagemEventoPassou = new StringBuilder("O evento ocorreu há ");
            boolean precisaDeE = false;

            if (period.getYears() > 0) {
                mensagemEventoPassou.append(period.getYears()).append(" ano(s)");
                precisaDeE = true;
            }
            if (period.getMonths() > 0) {
                if (precisaDeE) mensagemEventoPassou.append(", ");
                mensagemEventoPassou.append(period.getMonths()).append(" mes(es)");
                precisaDeE = true;
            }
            if (period.getDays() > 0) {
                if (precisaDeE) mensagemEventoPassou.append(" e ");
                mensagemEventoPassou.append(period.getDays()).append(" dia(s)");
            }
            System.out.println(mensagemEventoPassou);
        }
    }
}

Neste exemplo, usei um StringBuilder para construir a mensagem de forma mais flexível. A variável precisaDeE ajuda a decidir quando adicionar a vírgula ou o "e" na mensagem. Assim, você consegue uma saída mais natural, como "1 ano, 2 meses e 3 dias".

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Que legal, Armano!
Adorei a solução! Muito mais prática