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.

Fique por dentro

Content Editor at Alura and Software Developer

  • Edilson

    Valeu, ajudou!

    • Que bom Edilson! Fico feliz que tenha gostado 🙂

  • Raphael

    Show cara!

  • Humberto

    Vejo um problema, se vc passar a data da virada do horário de verão como esse dia não tem 0:00 horário da data será de 1:00 , se vc usar essa data com horário em alguma lógica, terá problemas!

  • Alisson Luann

    gostei

    • Alex Felipe

      Obrigado, Alisson 🙂

  • Braulio José Silva Santos

    Ola, Estou tentando utilizar esse código no meu projeto no Netbeans, mas a variavel sempre fica como null, alguem pode me ajudar?

    • Alex Felipe

      Oi Braulio, blz? Não uso o NetBeans, porém, seguindo exatamente os mesmos passos realizados no post, não deve acontecer isso. Sugerindo por cima, verifique se realmente todos os imports foram realizados de forma correta. E se for o caso, envie o código que eu posso dar uma olhada

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