Como converter String para Date em Java: Guia completo de string to date java

Alex Felipe
Alex Felipe

Compartilhe

Avalie este artigo

5 minutos de leitura

Se você pesquisou por 'string to date java', provavelmente quer aprender como transformar uma string em um objeto date em Java, formatando corretamente datas como dd/MM/yyyy em sistemas.

Neste artigo, você confere exemplos práticos e entende o funcionamento do java.util.Date, SimpleDateFormat e das novas APIs de data do Java. 

Aqui na Alura, muitas vezes é necessário lidar com informações como nome e data de lançamento de um curso, recebidas em formato de texto (String): 

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. Essa situação é bastante comum, pois várias APIs e formulários retornam datas em formato de texto: 

String dataRecebida = "23/11/2015"; 

Se você pesquisou por 'java string to date', 'java convert string to date' ou ainda 'date java from string', é provável que esteja numa situação dessas. Vamos aprender a resolver. 

Como especificar o formatador para converter String em Date no Java 

Para converter essa dataRecebida para a classe Date precisamos definir o formato esperado utilizando a classe SimpleDateFormat

SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy"); 
try { 
Date dataFormatada = formato.parse(dataRecebida); 
} catch (ParseException e) { 
// Tratar erro de parsing 
    e.printStackTrace(); 
}

Essa definição está especificando que esperamos uma data que contenha dia/mês/ano. 

Banner da Alura para a Semana do Orgulho Nerd anunciando até 44% de desconto em cursos de tecnologia, mais dois meses grátis. A imagem convida a começar a jornada no universo tech e destaca um bônus de gift card de 50 reais para plataformas como PlayStation, Xbox e Nintendo, incentivando a estudar programação e desenvolver carreira em tecnologia.

Como usar o SimpleDateFormat para converter String para Date em Java 

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"); 
try { 
Date data = formato.parse("23/11/2015"); 
    novo.setLancamento(data); 
} catch (ParseException e) { 
    e.printStackTrace(); 
}

E se eu imprimir essa data? Qual resultado aparece? 

System.out.println(data);

Resultado: 

> Mon Nov 23 00:00:00 BRST 2015  

Como formatar data em Java dd/MM/yyyy ao imprimir String to Date 

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  
  • Ponto importante sobre SimpleDateFormat: SimpleDateFormat NÃO é thread-safe e pode causar problemas graves em ambientes multi-thread, incluindo resultados incorretos e exceções como NumberFormatException. Se você precisa usar SimpleDateFormat em aplicações multi-thread, considere usar ThreadLocal ou, preferencialmente, migre para DateTimeFormatter do Java 8+, que é thread-safe e imutável. 

Como converter String para Date usando Calendar em Java 

Para manter a compatibilidade com bibliotecas antigas, converter o tipo Date para Calendar é simples:" l: 

Calendar calendar = Calendar.getInstance();  
calendar.setTime(date); 
System.out.println(formato.format(calendar.getTime()));

Resultado: 

> 23/11/2015  

Embora seja uma abordagem mais antiga, é importante compreender a compatibilidade com diferentes APIs de datas. 

Um ponto importante é que segundo discussões na OpenJDK (maio 2022), há propostas para deprecar Date, Calendar e SimpleDateFormat. Essas classes legadas devem ser evitadas em código novo, sendo mantidas apenas para compatibilidade com código antigo. 

Conheça as APIs do Java mais recentes para datas 

A partir do Java 8 (2014), foi introduzida a classe LocalDate do pacote "java.time", o qual possui uma melhor abstração no tratamento de datas.

Esta API moderna é thread-safe, imutável e resolve os problemas de design das classes legadas Date e SimpleDateFormat. Mas como posso converter String para LocalDate

DateTimeFormatter formato = DateTimeFormatter.ofPattern("dd/MM/yyyy"); 
try { 
    LocalDate data = LocalDate.parse("23/11/2015", formato); 
} catch (DateTimeParseException e) { 
// Tratar erro de parsing 
    e.printStackTrace(); 
}

Para código novo, sempre prefira as classes do pacote “java.time” (LocalDate, LocalDateTime, ZonedDateTime, DateTimeFormatter) em vez de Date, Calendar e SimpleDateFormat. As classes legadas têm problemas conhecidos de design, não são thread-safe e há discussões para eventual deprecação futura. 

Dica: veja também a documentação oficial do java.time.LocalDate para consultar outros formatos e usos. 

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 tarefas como 'java string to date', 'convert string to date java' e 'formatar data java dd/mm/yyyy', é fundamental utilizar as classes e APIs de formato de data disponíveis na linguagem. 

Quer se aprofundar nessa linguagem?

Se você quer se aprofundar na linguagem, confira a Trilha Java na Alura.

Se seu objetivo for seguir carreira nessa área, recomendamos que conheça a Carreira de Desenvolvimento Back-End Java, onde você segue um caminho organizado de evolução profissional, direto ao ponto. Uma jornada estruturada, com desafios reais, conteúdos práticos e tudo que o mercado espera. 

Mas se você deseja se aprofundar mais em manipulação de datas e outras novidades do Java atual, a plataforma da Alura oferece trilhas como Aprenda a programar em Java com Orientação a Objetos.

 Até a próxima! 

Avalie este artigo

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