[Resolvido] Como garantir que datas como 31/2/2012 não sejam aceitas pela sua classe Data?
12 respostas
R
Reptc2
Estou tentando fazer o teste para que datas como 31/2 não sejam aceitas, mas não consigo fazer com que o método que valida a data seja testado dentro do método que formata a data.
classData {
intdia;
intmes;
intano;
publicbooleandataValida(intd, intm, int a) { if (d > 31) return false; if (m > 12) return false; if ((m == 4 || m == 6 || m == 9 || m == 11) && (dia > 30)) { return false; } if (m == 2) { if (bissexto (a)) { if (d > 29) return false; } else { if (d > 28) return false; } } return true; } boolean bissexto (int a) { return (((a % 4 == 0) && (a % 100 != 0)) || (a % 400 == 0)); } String formatada() { if(this.dataValida() == false) { return ("Data Inválida"); } else { String d = this.dia + "/" + this.mes + "/" + this.ano; return d; } }}
EDIT
Ih, foi mal, agora que reparei que já tem essa verificação. Então não entendi o problema.
L
Laio
Se estiver trabalhando com tempo, de uma pesquisada sobre a classe LocalDateTime, que quebra um galho enorme. Com ela vc pode tbm pedir pra retornar um momento - de segundos a anos - específico. Relaxe, pra coisas assim nós programadores nao precisamos sofrer… vendo se tem alguma Biblioteca, Framework, etc, que faça as partes chatas/complicadas/desnecessárias/difíceis, a menos que queira reinventar a roda… :), então nesse caso veja se isso funciona: esse cálculo de bissexto, ou passando um parâmetro nesse this.dataValida ().
J
javaflex
Como @Laio falou, use LocalDate que já vem tudo pronto, nao precisa perder tempo com isso. Exemplo pra ilustrar:
publicbooleandataValida(StringdataIso){
try{
LocalDate.parse(dataIso); //pode passar por parametro outro formato caso queira}catch(DateTimeParseExceptione){
returnfalse;}
returntrue;}
if(!dataValida("2020-02-31")){
...
}
R
Reptc2
Obrigado, vou testar!
R
Reptc2
Obrigado! Na realidade este é um exercício que estou fazendo da apostila do Caelum, ela pede que você não permita que dadas como 31/02 sejam aceitas, e precisa ser feito sem utilizar classes prontas! O erro que esta dando é nesta linha "if(this.dataValida() == false) ", pois como tive de criar a formatada() como String, ele não está aceitando o teste utilizando um boolean. Sou iniciante, desculpe não saber explicar bem.
T
Trapezus
Você está chamando um método que necessita de parâmetros.
R
Reptc2
Eu estou passando estes parâmetros por outra classe.
Não é assim.
Veja. Você criou dois objetos c e c1 instanciando a Classe Conta.
Chamou o método setData passando parâmetros para os atributos da classe, mas não chamou o método dataValida repassando os valores que atribuiu.
O erro no this.dataValida() == false é justamente porque não tem o preenchimento dos argumentos no método.