Como converter String para Date em Java

(Last Updated On: 10 de julho de 2017)

No Alura, eu preciso do nome e da data de lançamento de um curso:

public class Curso {

     private String nome;
     private Date dataDeLancamento;

     public void setLancamento(Date data) {
          this.lancamento = data;
     }

     // resto do código

}

Porém, quando eu recebo a informação dataDeLancamento ela é passada em String:

String dataRecebida = “23/11/2015”;

Especificando o formatador

Para converter essa dataRecebida para a classe Date precisamos definir o formato esperado utilizando a classe SimpleDateFormat:

SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");

Essa definição está especificando que esperamos uma data que contenha dia/mês/ano.

Usando o formatador para converter para Date

Mas e para converter de String para Date? Utilizaremos o método parse() do objeto formato:

Date dataFormatada = formato.parse(dataRecebida);

Agora basta adicionar a data formatada para o objeto da classe Curso:

Curso novo = new Curso();

SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
Date data = formato.parse("23/11/2015");

novo.setLancamento(data);

E se eu imprimir essa data? Qual resultado aparece?

System.out.println(data);

Resultado:

> Mon Nov 23 00:00:00 BRST 2015

Imprimindo a data no formato desejado

Calma aí, não era isso que eu queria… Mesmo conseguindo converter uma String com um formato específico para Date o resultado esperado será de um tipo Date. Para que seja impresso o objeto data no formato dd/MM/yyyy usaremos o método format() do objeto formato!

System.out.println(formato.format(data));

Resultado:

> 23/11/2015

Convertendo com a API Calendar

Ótimo! Conseguimos o resultado esperado. Para manter a compatibilidade com bibliotecas antigas, e converter para Calendar, é fácil:

Calendar calendar = Calendar.getInstance();
calendar.setTime(date);

System.out.println(formato.format(calendar.getTime()));

Resultado:

> 23/11/2015

Mesmo sendo mais antigo, é importante compreender a existência da compatibilidade.

Conheço as APIs do Java mais recentes para datas

A partir do Java 8, foi introduzida a classe LocalDate do pacote “java.time”, o qual possui uma melhor abstração no tratamento de datas. Mas como posso converter String para LocalDate?

DateTimeFormatter formato = DateTimeFormatter.ofPattern("dd/MM/yyyy");
LocalDate data = LocalDate.parse("23/11/2015", formato);
System.out.println(data);

Resultado:

> 2015-11-23

Ops! Vamos lembrar que a impressão ainda é a padrão da classe, ou seja, da LocalDate. Da mesma forma que fizemos com a classe Date, temos que utilizar o objeto responsável pelo formato para imprimir a data conforme o esperado:

System.out.println(formato.format(data));

Resultado:

> 23/11/2015

Como vimos, para lidar com a tarefa de conversão de datas, precisamos utilizar uma classe responsável pelo formato que desejamos. Há um post da Caelum que detalha essa nova API do java 8.

Pensando nisso tudo, o criador da Caelum, Paulo Silveira, resolveu criar um curso de java 8 e suas bibliotecas. Além disso, esse é um assunto amplamente coberto nos cursos presenciais de Java da Caelum.

Content Editor at Alura and Software Developer

Próximo ArtigoComo trabalhar com bases de e-mails em Facebook Ads