Pessoal minha duvida é simples pra muito… minha data de nascimento é 14/10/1982
como faço para caucular minha idade encima dessa data?
Pessoal minha duvida é simples pra muito… minha data de nascimento é 14/10/1982
como faço para caucular minha idade encima dessa data?
Oi Leandro, se você quiser saber a lógica é essa:
Idade = dataAtual - dataNascimento;
vlw
Meu probleminha nao está na logica é o seguinte quero saber tb se a pessoa ja fez aniversario esse ano se nao fez quando vai fazer, qts dias falta qts meses etc…
http://www.guj.com.br/posts/list/21062.java
aqui também
NAO resolveu pq oque eu quero é o seguinte nasci em 05/03/2000 e minha data atual é 06/04/2010
ou seja eu quero o resultado 10 anos e 1 mese 1 dia 
coloca a data invertida 20100406 e subtrai a outra 20100406 - 20000305 = 100101.
Caraca, nunca tinha visto… curti.
curti [2]
ta ai naum conhecia, mta boa!
E quando acontece isso:
Data atual: 06/04/2010
NAscimento: 20/06/1980
20100406 - 19800620 = 299786
Então:
Seguindo esta lógica, eu teria hoje mais de 37 anos. E não tenho( ainda! ). Só tenho 29.
NAO resolveu pq oque eu quero é o seguinte nasci em 05/03/2000 e minha data atual é 06/04/2010
ou seja eu quero o resultado 10 anos e 1 mese 1 dia :)
Você só tem 10 anos oO?
Rlx foi só um exemplo rsrs
Pessoal ola só vou colar o codigo aki e vcs dao uma olhada.
package DATA;
public class DATA2{
public DATA2(){
try{
java.text.SimpleDateFormat df = new java.text.SimpleDateFormat ("dd/MM/yyyy hh:mm:ss");
java.util.Date d1 = df.parse("14/10/1982 23:00:00");//data de Nascimento
java.util.Date d2 = df.parse("15/10/2010 23:00:00");//Exemplo da minha Data Atual.
System.out.println("DATA 1: "+d1.toLocaleString());
System.out.println("DATA 2: "+d2.toLocaleString());
System.out.println("DIFERENCA DE ANOS: "+ getDifAno(d1,d2));
System.out.println("DIFERENCA DE MESES: "+ getDifMes(d1,d2));
System.out.println("DIFERENCA DE DIAS: "+ getDifDia(d1,d2));
System.out.println("DIFERENCA DE HORAS: "+ getDifHora(d1,d2));
System.out.println("DIFERENCA DE MINUTOS: "+ getDifMinuto(d1,d2));
System.out.println("DIFERENCA DE SEGUNDOS: "+ getDifSegundo(d1,d2));
System.out.println("DIFERENCA DE MILISEGUNDOS: "+ getDifMilisegundo(d1,d2));
}catch(java.text.ParseException p){
p.printStackTrace();
}
}
public static void main(String[] args) {
DATA2 difDatas = new DATA2();
}
private long getDifAno(java.util.Date dtMenor, java.util.Date dtMaior){
return dtMaior.getYear() - dtMenor.getYear();
}
private long getDifMes(java.util.Date dtMenor, java.util.Date dtMaior){
return dtMaior.getMonth() - dtMenor.getMonth() + (getDifAno(dtMenor,dtMaior) * 12);
}
private long getDifDia(java.util.Date dtMenor, java.util.Date dtMaior){
return (dtMaior.getTime() - dtMenor.getTime()) / (1000*60*60*24);
}
private long getDifHora(java.util.Date dtMenor, java.util.Date dtMaior){
return (dtMaior.getTime() - dtMenor.getTime()) / (1000*60*60);
}
private long getDifMinuto(java.util.Date dtMenor, java.util.Date dtMaior){
return (dtMaior.getTime() - dtMenor.getTime()) / (1000*60);
}
private long getDifSegundo(java.util.Date dtMenor, java.util.Date dtMaior){
return (dtMaior.getTime() - dtMenor.getTime()) / (1000);
}
private long getDifMilisegundo(java.util.Date dtMenor, java.util.Date dtMaior){
return dtMaior.getTime() - dtMenor.getTime();
}
}
Olha oque ele me retorna.
DATA 1: 14/10/1982 23:00:00
DATA 2: 15/10/2010 23:00:00
DIFERENCA DE ANOS: 28
DIFERENCA DE MESES: 336
DIFERENCA DE DIAS: 10228
DIFERENCA DE HORAS: 245472
DIFERENCA DE MINUTOS: 14728320
DIFERENCA DE SEGUNDOS: 883699200
DIFERENCA DE MILISEGUNDOS: 883699200000
Nao deveria de me retornar 29 anos e 0 meses e 1 dia?
como faço pra ele me retornar 29 anos e 0 mes e 1 dia etc…?
E quando acontece isso:Data atual: 06/04/2010
NAscimento: 20/06/198020100406 - 19800620 = 299786
Então:
- 86 dias = 2 meses e 26 dias.
- 97 + 2 mes = 99 meses
- 99 / 12 = 8,25 anos (nem me dei a trabalho de calcular o ,25 em meses)
- 29 + 8,25 = 37,5 anos
Seguindo esta lógica, eu teria hoje mais de 37 anos. E não tenho( ainda! ). Só tenho 29.
É retira o que disse, num curti não… kkkkkkkkk
Pessoal ola só vou colar o codigo aki e vcs dao uma olhada.Olha oque ele me retorna.
DATA 1: 14/10/1982 23:00:00
DATA 2: 15/10/2010 23:00:00
DIFERENCA DE ANOS: 28
DIFERENCA DE MESES: 336
DIFERENCA DE DIAS: 10228
DIFERENCA DE HORAS: 245472
DIFERENCA DE MINUTOS: 14728320
DIFERENCA DE SEGUNDOS: 883699200
DIFERENCA DE MILISEGUNDOS: 883699200000Nao deveria de me retornar 29 anos e 0 meses e 1 dia?
como faço pra ele me retornar 29 anos e 0 mes e 1 dia etc…?
Deveria retornar 28 Anos 0meses e 1dia… para retornar isso vc ta usando as datas do calendario onde fev vai até 28/29 dias e etc… pra ter esse resultado vc precisa usar Calendar ou o GregorianCalendar
Acho q da pra fazer assim tb… só que vc vai ter problema qdo o mes ou dia atual for menor que o do nascimento…
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)
iiiiiiiiiiiiiiiii, falhou…
20100406 - 19800620 = 299786
é o seguinte… tentando convencer o chefe…
o 97 me diz que falta 3 unidades para completar a proxima unidade (unidade de ano)… ou seja, faltam 3 meses pra completar um ano… estou com 9 meses
e o 86 a mesma coisa… faltaram 14 dias pra completar uma unidade de mes ou seja 30 - 14 = estou com 16 dias
no final… 29 anos 9 meses e 16 dias… ta certo?

iiiiiiiiiiiiiiiii, falhou…
20100406 - 19800620 = 299786é o seguinte… tentando convencer o chefe…
o 97 me diz que falta 3 unidades para completar a proxima unidade (unidade de ano)… ou seja, faltam 3 meses pra completar um ano… estou com 9 meses
e o 86 a mesma coisa… faltaram 14 dias pra completar uma unidade de mes ou seja 30 - 14 = estou com 16 diasno final… 29 anos 9 meses e 16 dias… ta certo?
Caracaaaa curti msm kkkkkkkkkk eu tentei fazer isso mas num consegui pensar dessa forma… agora assim… vc usou 30 - 14… ta errado… os meses não são todos de 30 dias. em 20/03/2010 ele tinha 29 anos e 9 meses, certo? passado 11 dias ele entrou em abril(pois março vai até 31) e + 6 dias de abril, ele tem 17 dias.
“Num entindi oque vcs falô” :S
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.
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)
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… 
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!
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 
Alguem pode me da uma força?