Pelo seu screenshot deu pra ver que você está usando Java 11, sendo assim, por que não usar a nova API de datas (java.time
)? Date
e SimpleDateFormat
são API’s antigas (o próprio tutorial da Oracle chama de “API legada”), que possuem uma série de problemas e falhas de design que foram corrigidas na API nova.
O uso de Date
em versões mais novas só se justifica se está lidando com código legado que ainda depende desta classe. Mas para código “novo”, não há impedimentos para que se use o java.time
.
No seu caso, por exemplo, como você só tem dia, mês e ano, uma alternativa é usar java.time.LocalDate
:
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.ResolverStyle;
...
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("dd/MM/uuuu").withResolverStyle(ResolverStyle.STRICT);
LocalDate data = LocalDate.parse(tempData, fmt);
Usei o ResolverStyle.STRICT
para que não aceite datas inválidas. Se não usar isso, serão aceitas datas como 31 de fevereiro (que é “ajustado” para dia 28 - ou 29 se o ano for bissexto). No modo STRICT
esses ajustes não são feitos e as datas inválidas lançam exceção (DateTimeParseException
).
Aliás, SimpleDateFormat
por padrão aceita essas datas inválidas também (e faz uns ajustes bem bizarros, dependendo do caso). Se não quer aceitar datas inválidas, bastaria fazer f.setLenient(false)
(caso decida continuar usando o SimpleDateFormat
).
Mas se for usar o java.time
, você teria que mudar a classe Client121
para usar LocalDate
em vez de Date
. Mas eu não usaria a API antiga, a menos que haja algum forte motivo (como compatibilidade com código legado, por exemplo).
E se ocorrer algum erro, o código acima lança um DateTimeParseException
, mas como esta é uma exceção não-checada, você não é obrigado a capturá-la (como ocorre com ParseException
). Claro que se quiser, pode fazer a validação:
try {
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("dd/MM/uuuu").withResolverStyle(ResolverStyle.STRICT);
LocalDate data = LocalDate.parse(tempData, fmt);
// usar a data...
} catch (DateTimeParseException e) {
System.out.println("Erro: " + e.getMessage());
}