Como converter String para Date em Java

Alex Felipe Victor Vieira
Alex Felipe Victor Vieira

Compartilhe

Na 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ça 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.

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 e na formação Java aqui na Alura.

Alex Felipe Victor Vieira
Alex Felipe Victor Vieira

Alex é instrutor e desenvolvedor e possui experiência em Java, Kotlin, Android. Criador de mais de 40 cursos, como Kotlin, Flutter, Android, persistência de dados, comunicação com Web API, personalização de telas, testes automatizados, arquitetura de Apps e Firebase. É expert em Programação Orientada a Objetos, visando sempre compartilhar as boas práticas e tendências do mercado de desenvolvimento de software. Atuou 2 anos como editor de conteúdo no blog da Alura e hoje ainda escreve artigos técnicos.

Veja outros artigos sobre Mobile