Diferença entre Datas usando Calendar

Bom pessoal, andei estudando as apostilas Caelum e estou com duvida em um exercicio utilizando Calendar.

Me parece simples mas ja tentei algumas coisas mas nada deu certo. Quero ver quantos dias faltam para uma data pré estabelecida a partir da data atual que peguei utilizando Calendar.getinstance().

Meu codigo ficou assim:

Calendar data = Calendar.getInstance(); System.out.println(data.getTime()); Calendar data2 = Calendar.getInstance(); data2.set(Calendar.DAY_OF_MONTH, 1); data2.set(Calendar.MONTH, 1); data2.set(Calendar.YEAR, 2014); data2.set(Calendar.HOUR_OF_DAY, 00); data2.set(Calendar.MINUTE, 00); data2.set(Calendar.SECOND, 00); System.out.println(data2.getTime()); long d1 = data.getTimeInMillis(); long d2 = data2.getTimeInMillis();

Como podem ver, peguei data atual, " setei" a data2 para 2014 e quero saber a diferença em dias, meses, horas de uma para outra.
tentei algo do tipo:

System.out.println("N° dias: " + (int)((d2 - d1)/ (246060*1000)));

pelas minhas contas parece q deu certinho, agora queria saber como faço para saber a diferença em meses, horas e etc.

desculpa amolação ai pessoal, so nao quero passar por um exercicio com duvida!

Me parece obvio que seria apenas extender (ou reduzir) tua fórmula:

para meses:
(int)((d2 - d1)/ (302460601000))

para anos:
(int)((d2 - d1)/ (1230246060*1000))

para horas:
(int)((d2 - d1)/ (60601000))

É claro que os valores não são exatos, pois nessa fórmula não estao sendo
considerados as variacoes nos tamanhos do meses.

/*
	 * Retorna a diferenca em dias entre duas Datas
	 */

	public static int diffInDays(Date d1, Date d2) {
		int MILLIS_IN_DAY = 86400000;

		Calendar c1 = Calendar.getInstance();
		c1.setTime(d1);
		c1.set(Calendar.MILLISECOND, 0);
		c1.set(Calendar.SECOND, 0);
		c1.set(Calendar.MINUTE, 0);
		c1.set(Calendar.HOUR_OF_DAY, 0);

		Calendar c2 = Calendar.getInstance();
		c2.setTime(d2);
		c2.set(Calendar.MILLISECOND, 0);
		c2.set(Calendar.SECOND, 0);
		c2.set(Calendar.MINUTE, 0);
		c2.set(Calendar.HOUR_OF_DAY, 0);
		return (int) ((c1.getTimeInMillis() - c2.getTimeInMillis()) / MILLIS_IN_DAY);
	}

public int diasEntre(Date a, Date b){ Calendar dInicial = Calendar.getInstance(); dInicial.setTime(a); Calendar dFinal = Calendar.getInstance(); dFinal.setTime(b); int count = 0; while (dInicial.get(Calendar.DAY_OF_MONTH) != dFinal.get(Calendar.DAY_OF_MONTH)){ dInicial.add(Calendar.DAY_OF_MONTH, 1); count ++; } return count; }

lgweb,

brigado mesmo pela ajuda, ache do jeito que vc fez bem interessante!

obrigado a todos!