Trabalho com datas em Java: java.time e Joda-Time

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
```html

O que é e para que serve?

Trabalhar com datas e horas é uma das tarefas mais comuns na programação em Java. A biblioteca padrão java.time (introduzida no Java 8) fornece uma API poderosa e intuitiva para processar datas, horas, fusos horários e períodos. Antes do Java 8, os desenvolvedores frequentemente usavam a biblioteca de terceiros Joda-Time, que se tornou o protótipo para java.time. Ambas as bibliotecas resolvem os problemas dos antigos java.util.Date e java.util.Calendar: segurança de thread, imutabilidade de objetos e métodos convenientes de formatação.

Como instalar?

java.time está embutido no Java 8 e versões mais recentes — não é necessária instalação. Para Joda-Time, adicione a dependência no Maven:

<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.12.5</version>
</dependency>

Para Gradle: implementation 'joda-time:joda-time:2.12.5'.

Funções principais

  • LocalDate, LocalTime, LocalDateTime — trabalhar com data/hora sem fuso horário.
  • ZonedDateTime, OffsetDateTime — consideração de fusos horários.
  • Period, Duration — diferença entre datas e horas.
  • DateTimeFormatter — formatação e análise flexíveis.
  • Instant — momento no tempo em UTC.

Exemplo de código em Java

import java.time.*;
import java.time.format.DateTimeFormatter;

public class DateExample {
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);

// Diferença entre datas
Period period = Period.between(specificDate, today);
System.out.println("Diferença: " + period.getYears() + " anos, " + period.getMonths() + " meses, " + period.getDays() + " dias");

// Formatação
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy");
String formatted = today.format(formatter);
System.out.println("Formatado: " + formatted);

// Análise de string
LocalDate parsed = LocalDate.parse("01.01.2024", formatter);
System.out.println("Analisado: " + parsed);

// Trabalhando com horas e fusos
ZonedDateTime zoned = ZonedDateTime.now(ZoneId.of("Europe/Moscow"));
System.out.println("Horário de Moscou: " + zoned);
}
}

Quando usar

java.time é a escolha principal para todos os novos projetos em Java 8+. Use-o para: cálculo de idade, prazos, logs com timestamps, agendadores de tarefas, trabalho com calendários e fusos horários. Joda-Time é útil para dar suporte a projetos antigos ou se forem necessárias funções adicionais, como Interval ou MutableDateTime. Ambas as bibliotecas simplificam significativamente o código em comparação com o obsoleto Calendar.

```

Recommendations