Existência de data no calendário

10 respostas
T

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

10 Respostas

Lucas_Camara

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;
	}
}
T

Tentei desse jeito, só que na minha Exceção quando eu coloco uma data válida, retorna uma mensagem de data inválida.

Lucas_Camara

Qual data válida vc passou que retornou como inválida?

T

Qualquer data válida ele retorna a mensagem como inválida

staroski

Troca o pattern "dd/MM/uuuu" por "dd/MM/yyyy".

T

Tá do mesmo jeito.

hugokotsubo

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.

T

if(ValidarData.isDateValid(data) == false)
throw erro;

Lucas_Camara

Tente apenas assim:

if (!ValidarData.isDateValid(data)) {
  throw erro;
}
hugokotsubo

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…

Criado 1 de dezembro de 2021
Ultima resposta 2 de dez. de 2021
Respostas 10
Participantes 4