Java:
Comparando duas datas

Como fazer:

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

public class ComparacaoDeDatas {
    public static void main(String[] args) {
        LocalDate dataInicio = LocalDate.of(2023, Month.JANUARY, 1);
        LocalDate dataFim = LocalDate.of(2023, Month.DECEMBER, 31);

        // Comparação simples: é depois?
        boolean isAfter = dataInicio.isAfter(dataFim);
        System.out.println("Data de início é depois da data de fim? " + isAfter); // false

        // Comparação simples: é antes?
        boolean isBefore = dataInicio.isBefore(dataFim);
        System.out.println("Data de início é antes da data de fim? " + isBefore); // true

        // Comparação de igualdade
        boolean isEqual = dataInicio.isEqual(dataFim);
        System.out.println("As datas são iguais? " + isEqual); // false

        // Diferença em dias
        long daysBetween = ChronoUnit.DAYS.between(dataInicio, dataFim);
        System.out.println("Dias entre as datas: " + daysBetween); // 364
    }
}

Visão Detalhada

Antigamente, comparar datas em Java era mais complicado e impreciso, usando java.util.Date e SimpleDateFormat. Essas classes podiam ter problemas com threads e usavam índices base 0 para meses, o que confundia. Desde o Java 8, a API java.time (Joda-Time inspirou) simplificou essa tarefa com LocalDate, LocalTime, e LocalDateTime.

Existem alternativas como a Calendar (da velha API), mas a nova API é mais intuitiva e segura em relação a threads. Detalhes de implementação da nova API incluem imutabilidade (objetos não mudam, você cria novos) e clareza de métodos (isBefore, isAfter, isEqual).

Veja Também