[Resolvido] Calcular diferença de Meses entre Datas

11 respostas
franzzita

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:

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;
    }

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.
;)

11 Respostas

pmlm

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

franzzita

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

Obg ^^

cristianonasciment

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…

franzzita

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

Obrigada ;]

cristianonasciment

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

franzzita

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

Obrigada ^^

franzzita

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

cristianonasciment

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 ???

franzzita

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

Muito obrigada Cristiano…
o/

cristianonasciment

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

C

Muito bom este componente…

Criado 31 de outubro de 2011
Ultima resposta 30 de jun. de 2013
Respostas 11
Participantes 4