Transformações com datas em Java
Antigo (Calendar) — Verboso
Exemplo para adicionar 1 mês:
Calendar mesQueVem = Calendar.getInstance();
mesQueVem.add(Calendar.MONTH, 1);
Novo (java.time API) — Fluente e Moderna
Exemplo equivalente:
LocalDate mesQueVem = LocalDate.now().plusMonths(1);
Vantagens:
Encadeamento de métodos sem risco de NullPointerException
Métodos para adicionar ou subtrair:
plusDays()
plusMonths()
plusYears()
minusDays()
minusMonths()
minusYears()
Exemplo: ExemploDatas.java
Classes Principais da nova API
LocalDate
- Representa data (sem hora ou timezone)
LocalDate hoje = LocalDate.now();
LocalDateTime
- Representa data + hora (sem timezone)
LocalDateTime agora = LocalDateTime.now();
- Criar LocalDateTime com horário específico:
LocalDateTime hojeAoMeioDia = LocalDate.now().atTime(12,0);
LocalTime
- Representa apenas hora:
LocalTime agora = LocalTime.now();
Combinação de modelos
LocalDate + LocalTime → LocalDateTime
LocalDateTime dataEhora = LocalDate.now().atTime(LocalTime.now());
LocalDateTime + ZoneId → ZonedDateTime
ZonedDateTime dataComHoraETimezone = dataEhora.atZone(ZoneId.of("America/Sao_Paulo"));
Conversões entre modelos
ZonedDateTime → LocalDateTime:
LocalDateTime semTimeZone = dataComHoraETimezone.toLocalDateTime();
LocalDateTime → LocalDate:
LocalDate apenasData = dataEhora.toLocalDate();
Exemplo: ExemploDatasETempo.java
Criação de Instâncias
Factory Method — of(): Criar datas com valores específicos:
LocalDate date = LocalDate.of(2014, 12, 25);
LocalDateTime dateTime = LocalDateTime.of(2014, 12, 25, 10, 30);
Parse — A partir de String: Conversão de String em data (detalhado mais à frente)
Imutabilidade da nova API
Cada operação gera um novo objeto
Segurança em ambientes concorrentes
Permite encadeamento de métodos
Modificação de valores — Métodos with
Exemplo para trocar o ano:
LocalDate dataDoPassado = LocalDate.now().withYear(1988);
Recuperação de informações — Métodos get
dataDoPassado.getYear(); // retorna 1988
dataDoPassado.getMonth(); // retorna o mês
Exemplo: ExemploCriacaoEConsultaDatas.java