Trabalho com datas em Java: visão geral de bibliotecas e ferramentas modernas
Trabalhar com datas e horas é uma das tarefas mais comuns no desenvolvimento em Java. Por muito tempo, as classes padrão java.util.Date e java.util.Calendar eram inconvenientes, mutáveis e propensas a erros. Felizmente, a situação mudou. Nesta visão geral, abordaremos três abordagens principais: o pacote integrado java.time, a biblioteca Joda-Time e as utilidades Apache Commons Lang.
1. java.time (Java 8+) — padrão moderno
A partir do Java 8, o pacote java.time, baseado nas ideias do Joda-Time, foi incluído na biblioteca padrão. Esta é a principal e recomendada forma de trabalhar com datas em novos projetos.
Classes principais:
LocalDate— data sem hora (ano, mês, dia).LocalTime— hora sem data (horas, minutos, segundos, nanossegundos).LocalDateTime— combinação de data e hora.ZonedDateTime— data e hora considerando o fuso horário.Instant— momento no tempo em UTC (legível por máquina).DurationePeriod— para trabalhar com intervalos de tempo.
Exemplos de uso:
import java.time.*;import java.time.format.DateTimeFormatter;import java.time.temporal.ChronoUnit;
public class JavaTimeExample { public static void main(String[] args) { // Data e hora atuais LocalDate today = LocalDate.now(); LocalTime now = LocalTime.now(); System.out.println("Hoje: " + today); System.out.println("Agora: " + now);
// Criando uma data específica LocalDate birthDate = LocalDate.of(1990, Month.MAY, 15); System.out.println("Data de nascimento: " + birthDate);
// Trabalhando com fusos horários ZonedDateTime berlinTime = ZonedDateTime.now(ZoneId.of("Europe/Berlin")); ZonedDateTime tokyoTime = ZonedDateTime.now(ZoneId.of("Asia/Tokyo")); System.out.println("Em Berlim: " + berlinTime); System.out.println("Em Tóquio: " + tokyoTime);
// Diferença entre datas long daysBetween = ChronoUnit.DAYS.between(birthDate, today); System.out.println("Dias desde o aniversário: " + daysBetween);
// Formatação DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm"); String formatted = LocalDateTime.now().format(formatter); System.out.println("Formatado: " + formatted);
// Parse de string LocalDate parsedDate = LocalDate.parse("2023-12-31"); System.out.println("Parseado: " + parsedDate); }}2. Joda-Time — alternativa testada pelo tempo
Antes do lançamento do Java 8, o Joda-Time era o padrão de facto para trabalhar com datas. Atualmente, seu uso só se justifica em projetos legados ou quando há necessidade de suporte a versões antigas do Java (inferiores a 8).
Principais características:
- Objetos imutáveis — segurança em threads.
- Suporte a múltiplos sistemas de calendário (islâmico, budista, etc.).
- API simples e intuitiva.
Exemplo de código com Joda-Time:
import org.joda.time.*;import org.joda.time.format.DateTimeFormat;import org.joda.time.format.DateTimeFormatter;
public class JodaTimeExample { public static void main(String[] args) { // Data e hora atuais DateTime now = DateTime.now(); System.out.println("Agora: " + now);
// Criando uma data DateTime specificDate = new DateTime(2020, 6, 15, 10, 30, 0); System.out.println("Data específica: " + specificDate);
// Adicionando dias DateTime nextW Também na biblioteca
Eigen para C++: guia completo com exemplos práticos
Cliente OAuth para TypeScript: autorização via GitHub, Google e outros provedores
Cliente Elasticsearch para Node.js: @elastic/elasticsearch
MapKit para Swift: guia completo com exemplos práticos