Como converter String para Date em Java

Como converter String para Date em Java
Alex Felipe
Alex Felipe

Compartilhe

Introdução

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”; 
Banner da Escola de Mobile: Matricula-se na escola de Mobile. Junte-se a uma comunidade de mais de 500 mil estudantes. Na Alura você tem acesso a todos os cursos em uma única assinatura; tem novos lançamentos a cada semana; desafios práticos. Clique e saiba mais!

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
Alex Felipe

Alex é instrutor e desenvolvedor e possui experiência em Java, Kotlin, Android. Atualmente cria conteúdo no canal https://www.youtube.com/@AlexFelipeDev.

Veja outros artigos sobre Mobile