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

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.
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!








