10.2 Trabalhando com datas de forma fluente

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



Source link

Leave a Reply

Your email address will not be published. Required fields are marked *