Problemas com diferença entre datas

2 respostas
hmichel
Olá, este é o código de cálculo de diferença de datas:
GregorianCalendar ini = new GregorianCalendar();
GregorianCalendar fim = new GregorianCalendar();
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
ini.setTime(sdf.parse("10/09/2004"));
fim.setTime(sdf.parse("25/10/2004"));
       
long dt1 = ini.getTimeInMillis();
long dt2 = fim.getTimeInMillis();
       
System.out.println((dt2-dt1)/86400000)
Encontrei um problema, com as seguintes datas: "31/05/2000" e "25/12/2015", deu diferença de 1 dia. Cálculos em outras ferramentas retornou 5686, e aqui 5685. O que pode estar errado, eu acho que deve ser algo com arredondamento, talvez? As outras ferramentas utilizadas foram banco de dados oracle e calculadoras. Já com as datas "01/01/2000" e "31/12/9999", o retorno foi correto.

Obrigado.

2 Respostas

1112

Fiz um teste aqui no meu método de diferença entre datas e ele retornou 5686.

Ele tá mais ou menos assim:

GregorianCalendar ini = new GregorianCalendar();
GregorianCalendar fim = new GregorianCalendar();

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
ini.setTime(sdf.parse("31/05/2000"));
fim.setTime(sdf.parse("25/12/2015"));        
float dt1 = ini.getTime().getTime()/24/60/60/1000;
float dt2 = fim.getTime().getTime()/24/60/60/1000;
       
System.out.println( new Float(dt2 - dt1).intValue() );

Faz tempo que o método foi criado, mas lembro que havias tido problemas de precisão usando long, então testei com float. Meio gambiarrístico, mas funciona.

hmichel

Valeu, agora sim funcionou. O erro era que eu dividia aqueles valores após a subtração, agora já realizao a operação dividido, ou seja, dava uma pequena diferença, e obiviamente, o parse da data retorna as 00:00, o que na menor diferença já da um dia de diferença.

Obrigado pela ajuda!

Criado 19 de agosto de 2004
Ultima resposta 19 de ago. de 2004
Respostas 2
Participantes 2