Não ajudou muito… Lá fala sobre formatador, comparação, etc. Esse não é o problema, pelo menos não até onde eu vejo…
C
Cecilia
É engraçado, pq ele tenta fazer uma triagem, mas ao que parece é do estilo : Se dia for maior que 31 está errado, se for menor está certo… Ele não relaciona o dia com o mês, tipo, 31 de abril está errado pq abril só tem 30 dias…
Cecília,vc pode fazer uns ifs comparando com getMaximum ou getActualMaximum(não sei se dah para fazer de forma mais direta)
Detalhes: http://www.javaalmanac.com/egs/java.util/GetDaysInMonth.html?l=rel
Aí não dah para ter estouro…
ou usar java.text.SimpleDateFormat e fazer da forma q lhe for pertinente.
No link do Igor vc encontra isso!
Cecilia, tenho esse codigo aqui que funciona legal, mas é como fazer refazer a roda :D ... De qqer forma ta ai:
privatebooleanvalidaData(Objectdigitado){booleanbOk=true;booleanbAnoBissexto=false;intiRestoCalculoAnoBissexto=0;int[]iUltimoDiaMes=newint[13];StringsMensagemDataInvalida="Data inválida ! Formato: DD/MM/YYYY";//Carrega a array com o ultimo dia de cada mes.iUltimoDiaMes[1]=31;iUltimoDiaMes[2]=28;//Se o ano for bissexto sera atribuido o dia 29.iUltimoDiaMes[3]=31;iUltimoDiaMes[4]=30;iUltimoDiaMes[5]=31;iUltimoDiaMes[6]=30;iUltimoDiaMes[7]=31;iUltimoDiaMes[8]=31;iUltimoDiaMes[9]=30;iUltimoDiaMes[10]=31;iUltimoDiaMes[11]=30;iUltimoDiaMes[12]=31;//Verificar formato dd/mm/aaaaStringsData=digitado.toString();intnTamanho=sData.length();//System.out.println("Data Digitada ::: " + sData);//Limitar tamanho a dez posicoesif(nTamanho==10){//---- Verifica se e numeroStringSequencia=sData.substring(0,2);Dia=Sequencia;inttamanhoSequencia=Sequencia.length();intchave=0;StringvalCont="";for(inti=0;i<tamanhoSequencia;i++){valCont=Sequencia.toString().substring(i,i+1);if((valCont.equals("0"))||(valCont.equals("1"))||(valCont.equals("2"))||(valCont.equals("3"))||(valCont.equals("4"))||(valCont.equals("5"))||(valCont.equals("6"))||(valCont.equals("7"))||(valCont.equals("8"))||(valCont.equals("9"))){chave=chave;}else{chave=1;}}if(chave==1){bOk=false;}//---- Verifica se e numeroSequencia=sData.substring(3,5);Mes=Sequencia;tamanhoSequencia=Sequencia.length();chave=0;valCont="";for(inti=0;i<tamanhoSequencia;i++){valCont=Sequencia.toString().substring(i,i+1);if((valCont.equals("0"))||(valCont.equals("1"))||(valCont.equals("2"))||(valCont.equals("3"))||(valCont.equals("4"))||(valCont.equals("5"))||(valCont.equals("6"))||(valCont.equals("7"))||(valCont.equals("8"))||(valCont.equals("9"))){chave=chave;}else{chave=1;}}if(chave==1){bOk=false;}//---- Verifica se e numeroSequencia=sData.substring(6,10);Ano=Sequencia;tamanhoSequencia=Sequencia.length();chave=0;valCont="";for(inti=0;i<tamanhoSequencia;i++){valCont=Sequencia.toString().substring(i,i+1);if((valCont.equals("0"))||(valCont.equals("1"))||(valCont.equals("2"))||(valCont.equals("3"))||(valCont.equals("4"))||(valCont.equals("5"))||(valCont.equals("6"))||(valCont.equals("7"))||(valCont.equals("8"))||(valCont.equals("9"))){chave=chave;}else{chave=1;}}if(chave==1){bOk=false;}if(bOk==true){//Verificar range de dia mes e anointDia=Integer.parseInt(sData.substring(0,2));intMes=Integer.parseInt(sData.substring(3,5));intAno=Integer.parseInt(sData.substring(6,10));//Verifica se o ano eh bissexto.//Ano bissexto se o ano for multiplo de 4.iRestoCalculoAnoBissexto=Ano%4;if(iRestoCalculoAnoBissexto==0){bAnoBissexto=true;iUltimoDiaMes[2]=29;}else{bAnoBissexto=false;}//Ano entre 1800 ate 3000// if (Ano < 1800 || Ano > 3000) {// sMensagemDataInvalida = "Data inválida ! Oanodeveestarentre1800e3000."; // bOk = false; //} else { //Mes entre 1 a 12 if (Mes < 1 || Mes > 12) { sMensagemDataInvalida = "Datainválida!Omêsdeveestarentre1e12."; bOk = false; } else { //Dia entre 1 e 31 if (Dia < 1 || Dia > 31) { sMensagemDataInvalida = "Datainválida!Odiadeveestarentre1e" + iUltimoDiaMes[Mes]; bOk = false; } else { if (Dia > iUltimoDiaMes[Mes]) { sMensagemDataInvalida = "Datainválida!Odiadeveestarentre1e" + iUltimoDiaMes[Mes]; bOk = false; } } // } } } } else { bOk = false; } if (bOk == false) { // businessObject.controlaLostFocus.setControleLostFocus(false); // showDialogs.dlgInformativoOk(sMensagemDataInvalida, "ValidaçãodeData"); // JOptionPane.showMessageDialog(null, sMensagemDataInvalida, "ValidaçãodeData", JOptionPane.OK_OPTION); setMenssagemDataInvalida( sMensagemDataInvalida ); }else{ setMenssagemDataInvalida(null); } return bOk; }
C
Cecilia
Valeu, gente… Mas acreditem o erro não estava no meu código O problema eh que o GregorianCalendar começa a contar os meses a partir de zero (Janeiro=0, fevereiro=1…)… Não tinha como dar certo, né?
No caso, antes de testar eu preciso diminuir em uma unid. o mes digitado pelo usuário, aí fica blzzzz.
brlima
“Cecília”:
Valeu, gente… Mas acreditem o erro não estava no meu código O problema eh que o GregorianCalendar começa a contar os meses a partir de zero (Janeiro=0, fevereiro=1…)… Não tinha como dar certo, né?
No caso, antes de testar eu preciso diminuir em uma unid. o mes digitado pelo usuário, aí fica blzzzz. :P
Potz cecilia…rs… como vc nao sabia disso ??? :?: :lol:
E porque tb no GregorianCalendar os meses estão definidos em variaveis static…