Como Caucular Idade?

Cara esse negocio de data invertida : 20100406 - 19800620 = 299786 foi a ideia do humberto.lima q acabou gerando esse assunto q ta rolando… responde as perguntas q eu fiz pra vc ae:

e outra coisa, nessas datas q vc colocou a pessoa tem 28anos 0mes e 1dia.

[quote]Duvida: Ali no seu

private long getDifMes(java.util.Date dtMenor, java.util.Date dtMaior){ return dtMaior.getMonth() - dtMenor.getMonth() + (getDifAno(dtMenor,dtMaior) * 12); }
pq vc colocou getDifAno(dtMenor,dtMaior) * 12 ?? isso resulta em 28 * 12 = 336 (o resultado q saiu para os meses)[/quote]

Use o Joda-Time. A classe Period faz esse cálculo para você:
http://joda-time.sourceforge.net/

Se você trabalha com datas, esqueça a API de datas do Java. Ela é péssima.

O link acima será a solução de todos os seus problemas.

Ta beleza eu corrigir meu Mês agora meu dia que ta dando problema.

Mesmo corrigindo esses erros, vc vai ter problema qdo o mes e/ou dia de nascimento for maior que mes/dia atual…

ex: nascimento: 07/04/1980
Hoje: 06/04/2010

Amanha fará 30 anos… porém no seu código, 2010 - 1980 = 30 já dará 30 anos, mas ele ainda tem 29 anos…

Bom as dicas do Vini num falham… ve ai o post dele.

abrs.

Nossa agora que complicou mais ainda…pq olha só…quando eu coloco minha data de nascimento como 14/10/1982 e sendo que eu só faço aniversario em 14/10/2010 certo? dai o ano me retorna 28 anos, só que se eu mudar minha data para 13/10/2010 ele deveria me retorna 27 nao? pq ele continua me retornando 28?

é exatamente o exemplo que eu coloquei acima…


package teste;

public class TestContaIdade {

	public static void main(String[] args) {
		long dataNascimento = 19821020L;

		long dataHoje = 20101019L;

		calculaIdade(dataNascimento, dataHoje);
		
		dataNascimento = 19821020L;
		dataHoje = 20101021L;
		
		calculaIdade(dataNascimento, dataHoje);
		
		dataNascimento = 19821020L;
		dataHoje = 20101020L;
		
		calculaIdade(dataNascimento, dataHoje);
	}

	private static void calculaIdade(long dataNascimento, long dataHoje) {
		long intervalo = dataHoje - dataNascimento;

		int ano = (int) (intervalo / 10000);

		int mes = (int) (intervalo / 100) - 100 * ano;

		int dia = (int) intervalo - (10000 * ano) - (100 * mes);

		System.out.println("Ano:" + ano);

		System.out.println("Mes:" + mes);

		System.out.println("Dia:" + dia);

		// o mes so pode variar entre [1 e 12] e [88 e 99], se for maior q 12
		// quer dizer q precisou "pedir emprestado" a unidade superior.
		if (mes > 12) {
			mes = 12 - (100 - mes);
		}

		// melhorar, procurar qntos dias tem o mes, pode ser com um map ou um array.
		if (dia > 31) {
			dia = 31 - (100 - dia);
		}

		System.out.println("Ano corrigido:" + ano);

		System.out.println("Mes corrigido:" + mes);

		System.out.println("Dia corrigido:" + dia);
	}
}

Isso não existe não fião!
kkkkkkkkkk
foi 1 mera coincidencia!

Quaze lá entao, blz vamos lá…na hora de eu inserir a data de nascimento no TextField ei vou inserir deça maneira né…14/10/1982 , mais i na hora de caucular a data ja que ele faz de traz para frente como faço pra formatar? que ficaria no caso 1982/10/14…

http://joda-time.sourceforge.net/

Acredito que essa API resolve todos os seus problemas… :wink:

Não resolve…pq é o seguinte. ta muito complexa para um iniciante em java que é o meu caso. Mesmo assim Vlw. Alguem pode me ajudar?

Isso não existe não fião!
kkkkkkkkkk
foi 1 mera coincidencia![/quote]

Entre: 23/11/1926 e 16/07/1933
Minha função: 6 anos, 7 meses, 24 dias 
JODA        : 6 anos, 7 meses, 23 dias 
Entre: 13/05/1992 e 26/02/2010
Minha função: 17 anos, 9 meses, 13 dias 
JODA        : 17 anos, 9 meses, 13 dias 
Entre: 20/02/1943 e 25/11/1984
Minha função: 41 anos, 9 meses, 5 dias 
JODA        : 41 anos, 9 meses, 5 dias 
Entre: 06/10/1969 e 10/07/1986
Minha função: 16 anos, 9 meses, 4 dias 
JODA        : 16 anos, 9 meses, 4 dias 
Entre: 14/03/1908 e 21/07/1990
Minha função: 82 anos, 4 meses, 7 dias 
JODA        : 82 anos, 4 meses, 7 dias 
Entre: 02/07/1986 e 16/07/1990
Minha função: 4 anos, 0 meses, 14 dias 
JODA        : 4 anos, 0 meses, 14 dias 
Entre: 20/10/1965 e 12/12/1984
Minha função: 19 anos, 1 meses, 23 dias 
JODA        : 19 anos, 1 meses, 22 dias 
Entre: 06/02/1933 e 06/07/1964
Minha função: 31 anos, 5 meses, 0 dias 
JODA        : 31 anos, 5 meses, 0 dias 
Entre: 22/10/1962 e 28/11/1962
Minha função: 0 anos, 1 meses, 6 dias 
JODA        : 0 anos, 1 meses, 6 dias 
Entre: 26/10/1968 e 17/01/1979
Minha função: 10 anos, 2 meses, 22 dias 
JODA        : 10 anos, 2 meses, 22 dias 
Entre: 17/01/1953 e 04/01/1993
Minha função: 39 anos, 11 meses, 18 dias 
JODA        : 39 anos, 11 meses, 18 dias 
Entre: 08/02/2001 e 14/11/2003
Minha função: 2 anos, 9 meses, 6 dias 
JODA        : 2 anos, 9 meses, 6 dias 
Entre: 17/07/1992 e 28/08/2007
Minha função: 15 anos, 1 meses, 11 dias 
JODA        : 15 anos, 1 meses, 11 dias 
Entre: 27/12/1979 e 19/02/2007
Minha função: 27 anos, 1 meses, 23 dias 
JODA        : 27 anos, 1 meses, 23 dias 
Entre: 05/05/1988 e 07/10/2010
Minha função: 22 anos, 5 meses, 2 dias 
JODA        : 22 anos, 5 meses, 2 dias 
Entre: 21/08/1939 e 12/12/1949
Minha função: 10 anos, 3 meses, 22 dias 
JODA        : 10 anos, 3 meses, 21 dias 
Entre: 09/04/1999 e 23/08/2004
Minha função: 5 anos, 4 meses, 14 dias 
JODA        : 5 anos, 4 meses, 14 dias 
Entre: 06/08/1980 e 10/03/2007
Minha função: 26 anos, 7 meses, 4 dias 
JODA        : 26 anos, 7 meses, 4 dias 
Entre: 11/04/2008 e 12/12/2008
Minha função: 0 anos, 8 meses, 1 dias 
JODA        : 0 anos, 8 meses, 1 dias 
Entre: 08/03/1944 e 18/02/1960
Minha função: 15 anos, 11 meses, 10 dias 
JODA        : 15 anos, 11 meses, 10 dias 

c acha?

Caraka pra vcs podem estar parecendo muito facil mais pra min ta tenso… ele está me retornando um valor correto como eu quero, mais só se a data estiver 19821014 mais na hora que eu vou inserir no tesxtfield eu vou inserir 14/10/1982 :frowning:

Alguem pode me da uma força?