Olá devs, gostaria de saber como verificar se uma data inserida pelo usuário existe no calendário. Por exemplo: “30/02/2020” (false), “37/15/2015” (false), “31/11/2020”(false), 01/02/1999(true).
Veja um exemplo usando LocalDate
:
private static boolean isDateValid(String date) {
try {
DateTimeFormatter formatter = DateTimeFormatter
.ofPattern("dd/MM/uuuu")
.withResolverStyle(ResolverStyle.STRICT);
LocalDate.parse(date, formatter);
return true;
} catch (DateTimeException ex) {
return false;
}
}
Tentei desse jeito, só que na minha Exceção quando eu coloco uma data válida, retorna uma mensagem de data inválida.
Qual data válida vc passou que retornou como inválida?
Qualquer data válida ele retorna a mensagem como inválida
Troca o pattern "dd/MM/uuuu"
por "dd/MM/yyyy"
.
Tá do mesmo jeito.
Quando se usa o ResolverStyle.STRICT
, o yyyy
só funciona se informarmos também a era (AC ou DC), então nesse caso tem que ser uuuu
mesmo - aqui tem uma explicação mais detalhada.
Veja também a diferença aqui e aqui.
@Thiago89 Como vc está testando? Veja no último link acima que funciona sim.
if(ValidarData.isDateValid(data) == false)
throw erro;
Tente apenas assim:
if (!ValidarData.isDateValid(data)) {
throw erro;
}
Vou te dar uma dica: sempre que vc diz que algo “não funciona” ou “deu erro”, vc tem que dar todas as informações necessárias para as pessoas te ajudarem e não dependerem de adivinhações.
O que tem na variável data
? Como ela foi inicializada? Você colocou um valor fixo? Leu do teclado (e nesse caso, qual foi o valor digitado)? Etc…
Se deu alguma mensagem de erro, qual foi?
Chute: você tentou usar isso em outra classe? Se foi, tem que trocar o método de private
para public
(mas é só um chute, como faltam informações, pode ser qualquer outra coisa).
E como já dito acima, valores booleanos não precisam ser comparados com true
ou false
, você pode testar direto:
if (! ValidarData.isDateValid(data)) {
// se retornou false, entra aqui
}
O !
é o operador de negação, então se o método retorna false
, o !
transforma em true
e ele entra no if
. Também poderia ser sem o !
:
if (ValidarData.isDateValid(data)) {
// data válida
} else {
// data inválida
}
Mas como eu já disse, sem mais detalhes, não dá pra saber porque não funcionou…