Calculo da diferença de meses entre duas datas

3 respostas
S

Estou tentando calcular quantos meses há entre duas datas só que não consegui nada que funcionasse até agora.
Estou trilhando neste caminho, mas como disse sem um bom resultado:

GregorianCalendar dataI = new GregorianCalendar(Integer.parseInt(tempIni[0]), Integer.parseInt(tempIni[1]), Integer.parseInt(tempIni[2]));
            GregorianCalendar dataF = new GregorianCalendar(Integer.parseInt(tempFinal[0]), Integer.parseInt(tempFinal[1]), Integer.parseInt(tempFinal[2]));
            
            long ini = dataI.getTimeInMillis();
            long fim = dataF.getTimeInMillis();

            this.qntMes[i] =(int) ((fim-ini) / (60*60*24*30*1000));
Alguem pode ajudar? Valew!

3 Respostas

W

Olá snoop,

isso que vc está tentando não dará certo pq nem todos os meses tem 30 dias. Alguns tem 30, outros 31, e fevereiro pode ter 28 ou 29. Acho que vc tem que tentar algo desse tipo:

Calendar dataIni = Calendar.getInstance();

dataIni.setTime(dataInicial);//onde dataIncial é um objeto do tipo Date representando sua data inicial

Calendar dataFim = Calendar.getInstance();

dataFim.setTime(dataFinal);//onde dataFinal é um objeto do tipo Date representando sua data final

int totalMeses = 0;

while(dataIni.before(dataFim)){

totalMeses++;

dataIni.add(Calendar.MONTH, 1);

}

[]'s

S

Valew cara parece que vai funcionar.
Obrigado!

hugosg

Meu bom amigo passei pelo mesmo problema q vc, eu usei o 30 e serviu pelo fato de se a média de dias em todos os meses. Mas oq fez realmente a diferença foi isso q coloquei na linha 7.

1. GregorianCalendar dataI = new GregorianCalendar(Integer.parseInt(tempIni[0]), Integer.parseInt(tempIni[1]), Integer.parseInt(tempIni[2]));  
   2.           GregorianCalendar dataF = new GregorianCalendar(Integer.parseInt(tempFinal[0]), Integer.parseInt(tempFinal[1]), Integer.parseInt(tempFinal[2]));  
   3.             
   4.           long ini = dataI.getTimeInMillis();  
   5.           long fim = dataF.getTimeInMillis();  
   6.   
   7.           this.qntMes[i] =(int) ((fim-ini) / (2592000000L));

Quando fiz essa mudança as contas deram certo, tente.

Criado 7 de janeiro de 2010
Ultima resposta 7 de jan. de 2010
Respostas 3
Participantes 3