[Resolvido] Calcular diferença de Meses entre Datas

Boa tarde Pessoal,

Estou com um pequeno problema no meu código que calcula diferença entre datas…

Por exemplo, passando Dia, Mês e Ano e a Data Atual devolver a quantidade de meses de diferença entre as datas…

Essa é minha classe:

[code]public class CalculaMeses {

private int total;

public int calcula(String anoFerias, String mesFerias, String diaFerias)
{
            //passando uma data ele calcula os meses da data atual até o ano desejado
    
            int ano = Integer.valueOf(anoFerias);
            int mes = Integer.valueOf(mesFerias);
            int dia = Integer.valueOf(diaFerias);
    
            Calendar Atual = Calendar.getInstance();  
            Calendar Ferias = Calendar.getInstance();  
            
            Ferias.set(Calendar.YEAR, ano);
            Ferias.set(Calendar.MONTH, mes);
            Ferias.set(Calendar.DAY_OF_MONTH, dia);
              
            int difDia = Ferias.get(Calendar.DAY_OF_MONTH) - Atual.get(Calendar.DAY_OF_MONTH);
            int difMes = Ferias.get(Calendar.MONTH) - Atual.get(Calendar.MONTH);  
            int difAno = ((Ferias.get(Calendar.YEAR) - Atual.get(Calendar.YEAR))*12);  
            

           int total = difAno+difMes;
                
            System.out.println("Diferenca meses: "+total);  
            System.out.println("Diferença Mês: "+difMes);
            System.out.println("Diferença Ano: "+difAno);
            System.out.println("Diferença Dia: "+difDia);
            
            return total;
}    [/code]

O problema é o seguinte (hoje data 31/10/2011) estou passando, dia 31, mês 12, ano 2011 o certo era ele calcular pra mim 2 meses, mas ele me mostra 3 meses.

Alguém sabe onde pode estar o problema?

Obrigada a todos.
:wink:

Os meses do Calendar são de 0 a 11. O mês que tu passas para o método é de 1 a 12.

Isso só nos meses né? Ano e dia ele calcula normalmente?

Obg ^^

recomendo usar a API para manipulação de datas que chama JODATIME
ele tem um método que calcula isso. Em uma linha você consegue esse valor.

Dê uma pesquisada…

Cristiano, pesquisei sobre mais ainda não entendi como usar, inclusive pesquisei já faz um tempo…

Obrigada ;]

LocalDate data1 = new LocalDate(2011, 3, 25); // você pode passar um Date no construtor
LocalDate dataAtual = new LocalDate();

Months months = Months.monthsBetween(data1, dataAtual);

System.out.println("A diferença é: " + months.getMonths());

Lembrando que você tem q baixar o jar do JODATIME pra usar essa API

Já está baixado, vou tentar aplicar esse código, posto aqui o resultado.

Obrigada ^^

Muito bom! Deu certinho…

Mas to passando datas no formato “yyyy-MM-dd”, como faço pra concatenar e usar separada igual no código

Não intendi sua dúvida, mas no seu caso eu não passaria 3 Strings como parâmetros no seu método e sim 2 Dates,

Para que você precisou separar dia, mês e ano em Strings ???

Então, era exatamente isso, separar… viajei aqui… ¬¬ já passei duas Dates… deu certo :smiley:

Muito obrigada Cristiano…
o/

De nada !!! ainda mais conterrânea minha… kkkk

Muito bom este componente…