Java 8: Como formatar LocalDate e LocalDateTime


Quando vamos imprimir uma data geralmente queremos que ela seja impressa em um formato específico.

A forma mais simples de formatar LocalDate e LocalDateTime é usando a classe DateTimeFormatter.

Veja um exemplo:

package br.com.dicasdejava.fundamentos;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class FormatarLocalDate {

    public static void main(String[] args) {

        //Obtém LocalDate de hoje
        LocalDate hoje = LocalDate.now();

        System.out.println("LocalDate antes de formatar: " + hoje);

        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");

        String hojeFormatado = hoje.format(formatter);

        System.out.println("LocalDate depois de formatar: " + hojeFormatado);

        //Obtém LocalDateTime de agora
        LocalDateTime agora = LocalDateTime.now();

        System.out.println("LocalDateTime antes de formatar: " + agora);

        formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss");

        String agoraFormatado = agora.format(formatter);

        System.out.println("LocalDateTime depois de formatar: " + agoraFormatado);

    }

}

Saída (No momento em que executo este programa):

LocalDate antes de formatar: 2018-01-07
LocalDate depois de formatar: 07/01/2018
LocalDateTime antes de formatar: 2018-01-07T16:11:26.485
LocalDateTime depois de formatar: 07/01/2018 16:11:26

Padrões de formatação

Você deve ter observado que utilizei dd/MM/yyyy para formatar a data e dd/MM/yyyy HH:mm:ss. Para escrever estes formatos eu me baseei no JavaDoc da classe DateTimeFormatter.

Existem muitas possibilidades de formatação das datas/horas escrevendo números, palavras (como os meses do ano), abreviações, etc.

Você não precisa saber tudo, claro que é muito bom dar uma boa estudada, mas vou deixar aqui alguns formatos básicos para você brincar com as formatações de data/hora. Primeiro o formato normal que todo mundo usa com o mínimo de dois dígitos para cada número, e quatro dígitos para o ano

  • dd: dia do mês com mínimo de dois dígitos (01 à 31)
  • MM: mês do ano com mínimo de dois dígitos (01 à 12)
  • yyyy: ano com quatro dígitos (exemplo: 2018)
  • HH: horas com mínimo de dois dígitos (00 à 24)
  • mm: minutos com mínimo de dois dígitos (00 à 59)
  • ss: minutos com mínimo de dois dígitos (00 à 59)
  • hh: horas (até 12) com mínimo de dois dígitos (00 à 12)

Além dos formatos mais comuns citados acima, também pode-se obter variações deles. Veja:

  • d: dia do mês com mínimo de um dígito (1 à 31)
  • M: mês do ano com mínimo de um dígito (1 à 12)
  • yy: ano com dois dígitos (exemplo: 18)
  • H: horas com mínimo de um dígito (0 à 24)
  • m: minutos com mínimo de um dígito (0 à 59)
  • s: minutos com mínimo de um dígito (0 à 59)
  • h: horas (até 12) com mínimo de um dígito (0 à 12)

O exemplo abaixo mostra a utilização dos formatos com mínimos de um dígito.

LocalDateTime agora = LocalDateTime.now();

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d/M/y h:m:s");

String agoraFormatado = agora.format(formatter);

System.out.println("LocalDateTime formatado: " + agoraFormatado);

Saída:

LocalDateTime formatado: 7/1/2018 4:32:4

Com isso você já pode brincar bastante com as formatações de Data/Hora em Java.

Referências:

  1. JavaDoc: DateTimeFormatter