É 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!
//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/aaaa
String sData = digitado.toString();
int nTamanho = sData.length();
//System.out.println("Data Digitada ::: " + sData);
//Limitar tamanho a dez posicoes
if (nTamanho == 10) {
//---- Verifica se e numero
String Sequencia = sData.substring(0, 2);
Dia = Sequencia;
int tamanhoSequencia = Sequencia.length();
int chave = 0;
String valCont = "";
for (int i = 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 numero
Sequencia = sData.substring(3, 5);
Mes = Sequencia;
tamanhoSequencia = Sequencia.length();
chave = 0;
valCont = "";
for (int i = 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 numero
Sequencia = sData.substring(6, 10);
Ano = Sequencia;
tamanhoSequencia = Sequencia.length();
chave = 0;
valCont = "";
for (int i = 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 ano
int Dia = Integer.parseInt(sData.substring(0, 2));
int Mes = Integer.parseInt(sData.substring(3, 5));
int Ano = 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 !
O ano deve estar entre 1800 e 3000.";
// bOk = false;
//} else {
//Mes entre 1 a 12
if (Mes < 1 || Mes > 12) {
sMensagemDataInvalida = “Data inválida !
O mês deve estar entre 1 e 12.”;
bOk = false;
} else {
//Dia entre 1 e 31
if (Dia < 1 || Dia > 31) {
sMensagemDataInvalida =
"Data inválida !
O dia deve estar entre 1 e " + iUltimoDiaMes[Mes];
bOk = false;
} else {
if (Dia > iUltimoDiaMes[Mes]) {
sMensagemDataInvalida =
"Data inválida !
O dia deve estar entre 1 e " + iUltimoDiaMes[Mes];
bOk = false;
}
}
// }
}
}
} else {
bOk = false;
}
if (bOk == false) {
// businessObject.controlaLostFocus.setControleLostFocus(false);
// showDialogs.dlgInformativoOk(sMensagemDataInvalida, "Validação de Data");
// JOptionPane.showMessageDialog(null, sMensagemDataInvalida, "Validação de Data", JOptionPane.OK_OPTION);
setMenssagemDataInvalida( sMensagemDataInvalida );
}else{
setMenssagemDataInvalida(null);
}
return bOk;
}[/code]
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.
[quote=“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[/quote]
Potz cecilia…rs… como vc nao sabia disso ??? :?: :lol:
E porque tb no GregorianCalendar os meses estão definidos em variaveis static…