Trabalho com datas em Java: visão geral das bibliotecas java.time, Joda-Time e Apache Commons

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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).
  • Duration e Period — 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

Recommendations