Depende do que você precisa fazer.
Você precisa criar um LocalDate
? Pois esta classe possui vários métodos úteis para manipular datas (como somar dias, comparar com outras datas, pegar o dia da semana, etc), que você não teria se ficasse somente com a String
. Se vai precisar deles, então precisa criar o LocalDate
.
Um outro exemplo de uso é converter a data para outro formato:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
String dateString = "30/04/2020";
LocalDate date = LocalDate.parse(dateString, formatter);
// outro formato
DateTimeFormatter outroFormato = DateTimeFormatter.ofPattern("dd 'de' MMMM 'de' uuuu", new Locale("pt", "BR"));
System.out.println(date.format(outroFormato)); // 30 de Abril de 2020
Outro ponto é que ao usar um DateTimeFormatter
para fazer o parsing, você também está validando a data. Por exemplo, se fosse digitado “99/99/9999”, isso não é uma data válida (pois dia 99 do mês 99 não existe), então o uso do DateTimeFormatter
juntamente com parse
é uma ótima forma de validar. Claro que dá pra fazer isso na mão, mas se a API já te dá isso pronto, não há motivo para não usar (e entendo que validação dos dados geralmente é um ponto importante, e datas são mais complicadas do que parecem, por isso é melhor delegar para uma API especializada).
Só tem um detalhe: se você digitar uma data como “31/04/2020” (31 de abril, que é inválido, pois abril só tem 30 dias), o DateTimeFormatter
ajusta automaticamente para 30 de abril.
Se quiser que ele valide também esses casos (em vez de fazer esse ajuste), basta mudá-lo para o modo STRICT
, usando um java.time.format.ResolverStyle
:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/uuuu")
.withResolverStyle(ResolverStyle.STRICT);
String dateString = "31/04/2020";
try {
LocalDate date = LocalDate.parse(dateString, formatter);
System.out.println(date.format(formatter));
} catch (DateTimeParseException e) {
System.out.println("Data inválida:" + e.getMessage());
}
Repare que usei “uuuu” em vez de “yyyy” para o ano. Para uma explicação mais detalhada sobre o motivo, veja aqui.