Não entendi muito bem oq vc deseja mais eu acho que são duas coisas:
Vc que verificar se uma data é válida:
O java não permite criar um objeto Date inválido, ou seja não a necessidade de verificar se um objeto do tipo Date passa no parse.
Vc que verificar se uma data é válida pra uma determinada regra de negócio, por exemplo: o ano ser menor ou igual ao atual:
importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.Calendar;importjava.util.Date;publicclassTeste{publicTeste(){try{System.out.println(confereData(newDate()));}catch(Exceptione){e.printStackTrace();}}publicbooleanconfereData(Datedata)throwsException{SimpleDateFormatsdf=newSimpleDateFormat("dd/mm/yyyy");try{//Métodos deprecated USAR CALENDAR AO INVÉS DE DATEintdia=data.getDay();intmes=data.getMonth();intano=data.getYear();//Essa data é igual a primeira!!!!!Datedata2=sdf.parse(dia+"/"+mes+"/"+ano);if(ano>2008)thrownewException("Data inválida");}catch(ParseExceptione){returnfalse;}returntrue;}publicbooleanconfereDataCalendar(Datedata)throwsException{Calendarcal=Calendar.getInstance();cal.setTime(data);SimpleDateFormatsdf=newSimpleDateFormat("dd/mm/yyyy");try{//Agora sim!!! Calendarintdia=cal.get(Calendar.DAY_OF_MONTH);intmes=cal.get(Calendar.MONTH);intano=cal.get(Calendar.YEAR);//Essa data é igual a primeira e igual ao calendar!!!!!Datedata2=sdf.parse(dia+"/"+mes+"/"+ano);if(ano>2008)thrownewException("Data inválida");}catch(ParseExceptione){returnfalse;}returntrue;}publicstaticvoidmain(String[]args){newTeste();}}
G
Giuliana
Ou seja, testar mes a mes
Testar ano
Testar fevereiro
Testar dias > 31
se for assim na munheca é facil
Agora método pequeno que verifica se data é invalida ! Isso não tem ?
Giuliana :shock:
Foxlol
Giuliana:
A sim
ué, se é data valida ou não !
29/02/2007 invalido
29/02/2008 valido
31/04/2008 invalido
.
.
.
.
Como o Ivo Costa disse não é possível criar um Date inválido. E caso vc queira tratar alguma coisa em especialfaça como ele mencionou acima.
Flw
ivo_costa
Vou tentar denovo:
NÃO é possível criar um objeto do tipo DATE inválido. Ou seja NÃO há necessídade de verificar se um objeto DATE é inválido.
O que poderia acontecer é vc querer verificar se uma STRING e NÃO um objeto DATE é uma data válida, então seria assim:
Mas acho que tô ficando doida ou esse Java tá danado mas ...
Se eu passar a data : 31/04/2008
Debugando ele me mostra no dia o Numero 1 no mes o 4 e no ano o 2008
Se eu passar 29/02/2007 ele me mostra no dia 1 no mes 2 no ano 2007
Por que ele tá em mostrando no
int dia = cal.get(Calendar.DAY_OF_MONTH);
somente 1 ?????????
Ta danado gente !
Desculpe a ingronorança
Giuliana
Foxlol
Giuliana, como vc esta criando ou pegando este Date que vc recebe como parametro no metodo confereData?
Este teu tratamento esta totalmente desnecessario.
G
Giuliana
Ahhh ? desnecessario ?
Ué, o processo é :
O Usuario digita la no Form 31/04/2008
No meu servlet eu passo :
if (!util.confereData(cliente.getDtNascCli())){
consistencia=false;
}else
ele tem que me retornar um boolean
ivo_costa
O que o objeto cliente?
Como vc está populando objeto Cliente?
Como vc está pegando a data do form e colocando no atributo dtNascCli no objeto cliente?
Talvez o problema esteja antes da validação da data tenta o seguinte:
Ele nao deu Exception e lá no console (println) escreveu : 01/09/1980
Socorro !!!
Giuliana
WashingtonBotelho
Eu fiz um código aqui pra validar a data.
Vê se te ajuda ai amigo.
Giu, não é muito difícil. ;D
publicStringvalidaData(StringdataDia,StringdataMes,StringdataAno){dia=Integer.parseInt(dataDia);mes=Integer.parseInt(dataMes);ano=Integer.parseInt(dataAno);if(dia<1||dia>31||// Dia menor que 1 e maior que 31mes==2&&((ano-1900)%4)!=0&&dia>28||// Fevereiro e não bissesto.mes<=6&&(mes%2)==0&&dia>30||// Meses 30mes>6&&((mes-7)%2)!=0&&dia>30){// Meses 31return"O Dia de Nascimento é inválido!";}elseif(mes<1||mes>12){return"O Mês de Nascimento é inválido!";}elseif(ano<1||ano>calendar.get(GregorianCalendar.YEAR)){return"O Ano de Nascimento é inválido!";}returnnull;}
Obs.: calendar é um objeto GregorianCalendar.
Abraço..
Foxlol
Giuliana:
Fiz do jeito que me falou :
Passei a data : 32/08/1980
Ele nao deu Exception e lá no console (println) escreveu : 01/09/1980
Socorro !!!
Giuliana
Então…eh isso mesmo que eu te disse…ele da corrigindo a data pra vc.
Vc passou a data errada 32/08/1980…e ele corrigiu para 01/09/1980.
Ou seja, qualquer data que chegar no metodo confereData estara correta e nunca lancará exceção.
Vc tem que fazer teu servlet receber uma String em vez de Date, e vc mesmo validar.
Ou fazer de algum outro modo que no momento num me vem a cabeça
G
Giuliana
Entendi menino!
Muito obrigada mesmo pela força
Vou continuar tentando aqui
Giuliana
G
Giuliana
Meninos, fiz o que vocês me falaram :
Ao inves de enviar um Date para o confereData, enviei diretamente o request.getparameter(“minhaData”) para lá como String.
Ae consegui resolver o problema, ele agora lança a Exception.
Porém, não achei uma Melhor Solução e gostaria que alguem pudesse me explicar o por quê que passando um atributo tipo Date ele “Concerta” com “C” mesmo tipo se passar 31/04/2008 ele aparece lá no método 01/05/2008 !!!
Muito obrigada
Foxlol, washington e todos que tentaram me ajudar
Giuliana
W
WillyKocher
ue porque ele corrige a data pra vc, ele sabe que não existe dia 31 no mes de abril, logo ele pula pra proxima data valida que seria, 01/05