Diferença entre Datas

4 respostas
Fabricio_Cozer_Marti

Galera!,

Alguém sabe dizer se existe alguma classe do java que informa a diferença entre duas datas, retornando em dias ??

Valeu!!!

4 Respostas

1112

http://www.guj.com.br/forum/viewtopic.php?t=9440&highlight=diferen�a+datas

T
"fmartins":
Alguém sabe dizer se existe alguma classe do java que informa a diferença entre duas datas, retornando em dias ??
Bom, no JDK não tem, mas você sempre pode fazer algumas continhas...
import java.util.*;
class Test132 {
    public static void main(String[] args) {
        Calendar c1 = new GregorianCalendar(2004, 10, 6);
        Calendar c2 = new GregorianCalendar(2004, 10, 20);
        Date d1 = c1.getTime();
        Date d2 = c2.getTime();
        
        double diffDias = Math.floor((d2.getTime() - d1.getTime()) / 1000.0 / 86400.00);
        System.out.println (diffDias);
    }
}
Fabricio_Cozer_Marti

OkÁ!

Vou fazer essas contas!

MarcoRosner

Pessoal,

Pelo que eu andei analisando do código de vocês, ele só contará os dias caso as datas sejam do mesmo mês, por exemplo, ele acertará se for 02/11/2007 e 29/11/2007, mas não conseguirá contar se for 02/10/2007 e 29/11/2007.

Também não consegui achar nenhum código que resolvesse meu problema, então fiz o meu :wink:

public int Diferenca_Data(int data_atual, int data_prevista){

		int aDia, aMes, pDia, pMes, pAno, dia;
		int aux, i, aNumDiasMes, pNumDiasMes;
		int flag=0;

		aDia = data_atual/1000000;

		aux = data_atual%1000000;

		aMes = aux/10000;

		pDia = data_prevista/1000000;

		aux = data_prevista%1000000;

		pMes = aux/10000;

		pAno = aux%10000;

		while (aMes > pMes){

			if (flag == 1){

				pMes = pMes + 1;

			}

			pNumDiasMes = NumMes(pMes,pAno);

			if (aMes == pMes){

				aux = aDia;

			}else if (aMes > pMes && flag == 1){

				aux = pNumDiasMes;

			}else{

				aux = pNumDiasMes - pDia;

			}

			for (i=aux;i>0;i--){

				dia = 1 + dia;

			}

			flag = 1;
		}

		if (aDia > pDia){
			aux = aDia - pDia;

			for (i=aux;i>0;i--){

				dia = 1 + dia;

			}
		}

		return dia;
	}

	public int NumMes(int mes, int ano){
		int NumDiasMes;

		if ((mes==1)||(mes==3)||(mes==5)||(mes==7)||(mes==8)||(mes==10)||(mes==12))
		{
			NumDiasMes=31;
		}
		else if ((mes==4)||(mes==6)||(mes==9)||(mes==11))
		{
			NumDiasMes=30;
		}
		else
		{

			if (((ano % 4) == 0) && ((ano % 100) == 0))

				NumDiasMes=29;

			else if ((ano % 400) == 0)

				NumDiasMes=29;

			else
				NumDiasMes=28;
		}

		return NumDiasMes;
	}

Não sei se esta é a melhor solução, mas resolveu meu caso. Caso alguem encontre um bug, por favor, relatem :smiley:

Criado 14 de outubro de 2004
Ultima resposta 25 de nov. de 2007
Respostas 4
Participantes 4