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
- Documentação oficial da Oracle sobre a API java.time: https://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html
- Tutorial da API de data e hora do Java: https://www.baeldung.com/java-8-date-time-intro