O erro está tentar calcular multiplicando tudo o que irá dividir, e a cada passagem de uma unidade para outra necessariamente há "perda" de valores pois a conta não é exata. Da maneira que vc fez daria certo se a divisão fosse exata sempre, o que quase nunca acontece :wink:
Veja uma classe que fiz para mostrar isto, e olhe "a surpresa" do resultado da execução:
importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.Date;publicclassCalculaAnos{publicstaticvoidmain(String[]args){SimpleDateFormatsdf=newSimpleDateFormat("dd/MM/yyyyHH:mm:ss");try{DatedateOne=sdf.parse("01/01/197210:00:00");DatedateTwo=sdf.parse("01/01/200411:00:00");longlongOne=dateOne.getTime();longlongTwo=dateTwo.getTime();longdiff=longTwo-longOne;diff/=1000;// diferenca em segundosdiff/=60;// diferenca em minutosdiff/=60;// diferenca em horasdiff/=24;// diferenca em diasdiff/=365;// diferenca em anosSystem.out.println("Adiferencametododedivisoessucessivaséde:"+diff);diff=longTwo-longOne;diff/=1000*60*60*24*365;// tenta calcular a diferença desta forma System.out.println("Adiferencametododemultiplicaçãoéde:"+diff);}catch(ParseExceptione){System.err.println(e);}}}
[]s, Welington B. Souza
R
rbarioni
putz…
valew mesmo pela dica wbsouza…agora deve funcionar meu calculo…
Sabe, 3652460601000 = 31.536.000.000, mas o java está tratando essas operações como multiplicação de inteiros, e como Integer.MAX_VALUE = 2.147.483.647, ocorre overflow na multiplicação.
Dessa forma, basta indicar que a multiplicação é com números do tipo long.