10.2 Trabalhando com datas de forma fluente

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:
plusDays()
plusMonths()
plusYears()
minusDays()
minusMonths()
minusYears()
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
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();
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