a parte do fevereiro do ano bissexto eh a mais legal :mrgreen:
não é complicado, você começa com uma array pra indicar quantos dias tem cada mês, aí valida o ano (tem que ser número positivo), depois valida o mês, depois valida o dia (aqui você inclui o bissexto caso seja).
Mude o valor para false que resolve. Ao parsear datas como você falou uma exceção será lançada.
thiagossantos
existe algo que faz isso de colocar 13 pra 1 ??? :shock:
_fs
Como você faz a conversão entre a string que o usuário digita para um objeto date? Você está usando Swing? Ou é ambiente web? Está usando algum framework? Ou está fazendo a tranformação na mão utilizando protocolo SPCSPL*?
[size=9]* String Pra Cá String Pra Lá - cv[/size]
NoodleZ
Olá pessoal,
Eu to consciente que reinventei a roda, mas segue um exemplo de codigo de validação de datas que eu uso aqui no sistema.
/** * Nome: dataInvalida <br> * Propósito: Verifica se a data é válida <br> * Parâmetros: * @param data - data a ser validada string * @return true se houver erro e false se não houver */publicstaticbooleandataInvalida(Stringdata){booleandataInvalida=true;StringvalidaDia28="(0[1-9]|[12][0-8])";StringvalidaDia29="(0[1-9]|[12][0-9])";StringvalidaDia30="(0[1-9]|[12][0-9]|30)";StringvalidaDia31="(0[1-9]|[12][0-9]|3[01])";StringvalidaMes="(0[1-9]|1[0-2])";StringvalidaAno="([0-9]{4})";StringmesCom31="(0[13578]|1[02])";Stringfevereiro="(02)";Stringbarra="/";StringexprInicial=validaDia31+barra+validaMes+barra+validaAno;StringexprFinal=exprInicial;if(Pattern.matches(exprInicial,data)){StringTokenizertokenizer=newStringTokenizer(data,barra);//String dataArray[] = data.split("/"); Não funciona no JDK 1.3Stringdia=tokenizer.nextToken();//dataArray[0];Stringmes=tokenizer.nextToken();//dataArray[1];Stringano=tokenizer.nextToken();//dataArray[2];StringexprDia=validaDia30;if(Pattern.matches(mesCom31,mes)){exprDia=validaDia31;}else{if(Pattern.matches(fevereiro,mes)){if(eBissexto(Integer.parseInt(ano))){exprDia=validaDia29;}else{exprDia=validaDia28;}}}exprFinal=exprDia+barra+validaMes+barra+validaAno;if(Pattern.matches(exprFinal,data)){dataInvalida=false;}}returndataInvalida;}/** * Nome: eBissexto <br> * Propósito: verifica se o ano passado é bissexto ou não <br> * Parâmetros: * @param ano - ano a ser verificado se é bissexto * @return true se bissexto e false se não */privatestaticbooleaneBissexto(intano){booleanbissexto=false;if(((ano%ConstantesNumericas.NUMERO_4)==0&&(ano%ConstantesNumericas.NUMERO_100)!=0)||(ano%ConstantesNumericas.NUMERO_400)==0){bissexto=true;}returnbissexto;}
Existem algumas adaptações já que não podemos usar por aqui nem a classe Pattern nem o String.split() por não estrem presente no JDK 1.3, mas funciona perfeitamente.
Abraços
Gabriel Thiesen
_fs
Aaaaah então é o struts que está fazendo a conversão pra você? … hum …
T
Tulio_da_Silva_Galva
por exemplo: eu tenho uma aplicação que possui um campo onde o usuário pode digitar datas… mas se o usuário digitar uma data do tipo 10/13/2005 o java transforma para 10/01/2006… ou se o usuário digita 31/02/2005 o java transforma para 01/03/2005… existe alguma função em Java que faça a validação dessas datas… ou seja que eu possa informar ao usuário que fevereiro só vai até o dia 28 ou 29 (em ano bissexto)? Ou diga que o mês 13 não existe?
T
Tulio_da_Silva_Galva
ainda sou iniciante em java… vc tem algum exemplo deste
setLenient
?
T
Tulio_da_Silva_Galva
é ambiente WEB, utilizo Struts/Hibernate… mas já peguei um exemplo… Valeu