Trabalho com datas em Java: visão geral de bibliotecas e ferramentas
Trabalhar com datas e horas é uma das tarefas mais frequentes no desenvolvimento em Java. Durante muito tempo, as classes padrão java.util.Date e java.util.Calendar geraram muitas críticas devido à sua falta de intuitividade, mutabilidade e problemas com segurança de thread. No entanto, com o lançamento do Java 8, a situação mudou drasticamente. Nesta visão geral, examinaremos as principais bibliotecas para trabalhar com datas em Java, seus pontos fortes e exemplos de uso.
1. java.time (JSR-310) — API padrão
A partir do Java 8, o pacote java.time é a principal ferramenta para trabalhar com datas e horas. Ele foi desenvolvido sob a liderança de Stephen Colebourne, autor do Joda-Time, e incorporou as melhores práticas.
Classes principais:
LocalDate— data sem hora (ano, mês, dia).LocalTime— hora sem data (horas, minutos, segundos, nanossegundos).LocalDateTime— data e hora sem fuso horário.ZonedDateTime— data e hora com fuso horário.Instant— momento no tempo em UTC (representação legível por máquina).DurationePeriod— para trabalhar com intervalos de tempo.
Exemplo de uso:
import java.time.*;import java.time.format.DateTimeFormatter;
public class JavaTimeExample { public static void main(String[] args) { // Data atual LocalDate today = LocalDate.now(); System.out.println("Hoje: " + today);
// Criando uma data específica LocalDate specificDate = LocalDate.of(2025, Month.MARCH, 15); System.out.println("Data específica: " + specificDate);
// Trabalhando com hora LocalTime now = LocalTime.now(); LocalTime meetingTime = LocalTime.of(14, 30); System.out.println("Horário da reunião: " + meetingTime);
// Formatação DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm"); LocalDateTime event = LocalDateTime.of(2025, 12, 31, 23, 59); String formatted = event.format(formatter); System.out.println("Formatado: " + formatted);
// Diferença entre datas Period period = Period.between(today, specificDate); System.out.println("Dias até 15 de março: " + period.getDays()); }}Vantagens: integrado ao JDK, seguro para threads, objetos imutáveis, API rica, suporte a todos os fusos horários.
2. Joda-Time
Antes do surgimento do java.time, o Joda-Time era o padrão de facto para trabalhar com datas em Java. Hoje, seu uso só se justifica em projetos antigos (anteriores ao Java 8), pois os desenvolvedores recomendam migrar para java.time.
Exemplo:
import org.joda.time.DateTime;import org.joda.time.Days;import org.joda.time.LocalDate;
public class JodaTimeExample { public static void main(String[] args) { // Data atual LocalDate today = LocalDate.now(); DateTime now = DateTime.now();
// Diferença entre datas LocalDate start = new LocalDate(2025, 1, 1); LocalDate end = new LocalDate(2025, 12, 31); int days = Days.daysBetween(start, end).getDays(); System.out.println("Dias entre: " + days); }}Desvantagens: requer dependência externa, não é atualizado ativamente, inferior ao java.time em funcionalidade.
3. Apache Commons Lang 3
A biblioteca org.apache.commons.lang3.time fornece utilitários convenientes para trabalhar com datas, especialmente para formatação, análise e cálculos.
Classes populares:
DateUtils— métodos para
Também na biblioteca
Aprendizado de Máquina em PHP: Visão Geral de Bibliotecas e Ferramentas
Framework CLI para Rust: clap
Event Bus e padrão Observer em Kotlin: implementação e exemplos
Processamento de JSON em Go (Golang): encoding/json e alternativas