Entre para a LISTA VIP da Black Friday

00

DIAS

00

HORAS

00

MIN

00

SEG

Clique para saber mais

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 promoção da black friday, com os dizeres: A Black Friday Alura está chegando. Faça parte da Lista VIP, receba o maior desconto do ano em primeira mão e garanta bônus exclusivos. Quero ser VIP

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