Problemas com Data

Boa tarde,

pessoal eu estou tentando fazer um soma de um valor intéiro com uma data e está acontecendo um erro maluco! Veja o meu código:

[code]SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");

GregorianCalendar gcDataAfr = new GregorianCalendar();

gcDataAfr.setTime(sdf.parse("01/08/2004"));

long lDataAfr = gcDataAfr.getTimeInMillis();

lDataAfr = lDataAfr + 31 * 86400000;

Date dtProxAfr = new Date(lDataAfr);

String saidaTeste = String.valueOf(sdf.format(dtProxAfr));

out.print("Data da Próxima Programação: "+ saidaTeste +"<br>");

[/code]

O mês 08 possui 31 dias o resultado da soma deveria ser 01/09/2004
mas no entanto está saindo 10/07/2004 !

O que eu estou fazendo de errado? Alguêm poderia me mostrar?

Obrigado!

Use a letra L :slight_smile:

lDataAfr = lDataAfr + 31L * 86400000;

Eu e o allansk resolvemos o seu problema suando um pouco. A sua conta de 31 dias em milisegundos explodia um int. O java faz contas usando o maior dos parametros (em relacao ao alcance dos tipos), e entao ele guardava esse numero em um int. Como ele passa de 2 bilhoes, dava um valor negativo.

Mas aqui vao algumas criticas construtivas par ao seu codigo:

  • nao de nome de variaveis usando notacao hungara. java eh tipado, nos ja sabemos o tipo da variavel.

  • voce podiia adicioanr 31 dias a data usando o metodo add do GregorianCalendar, que recebe um tipo e um numero como argumento.

  • nao fique jogando html a partir de uma servlet. faca MVC.