Como converter String para Date em Java
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”;
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.