Como calcular a idade

Olá,

Alguém sabe como calcular a idade de um indivíduo ? Uso Date ou Calendar ???

Obrigado.

Márcio

Procure no fórum por: diferença datas

Tem tópicos sobre diferença dedatas com retorno em dias, basta você mudar para anos…

[]´s

vc pode utilizar esse método…

       public Integer getIdade() {
		GregorianCalendar hj=new GregorianCalendar();
		GregorianCalendar nascimento=new GregorianCalendar();
		if(usuario.getDtNascimento()!=null){
			nascimento.setTime(usuario.getDtNascimento());
		}		
		int anohj=hj.get(Calendar.YEAR);
		int anoNascimento=nascimento.get(Calendar.YEAR);
		return new Integer(anohj-anoNascimento);
	}

Obrigado Vegetto

Obrigado Viviane,

Vocês são uns amores.

Márcio

oi, vivi.....seu codigo ta bakana....

 sistema fará uma continha assim: anohj-anonascimento.....e dara como resultado a suposta idade do ser......
 
mas c e fulano nasceu no fim do ano e a data atual for do começo do ano, a idade estara errada, precisa d um tratamento para os meses, tbm.........bjokas

Acabei de fazer uma pequena modificação no método que calcula a idade, fazendo com que o mesmo calcule também levando em conta o mes e o dia de nascimento.


	/**
	 * Recupera a idade.
	 * @return <b>idade.</b>
	 * @author  <b>Joao /DigitalMan/ Rocha</b>
	 * @version <b>3.0</b>
	 * @since   <b>30/05/2006</b>
	*/	
	public int getIdade() {

		// Data de hoje.
 		GregorianCalendar agora = new GregorianCalendar();
 		int ano = NUMERO_INTEIRO_ZERO, 
			mes = NUMERO_INTEIRO_ZERO, dia = NUMERO_INTEIRO_ZERO;
 		
		// Data do nascimento.
 		GregorianCalendar nascimento = new GregorianCalendar();
 		int anoNasc = NUMERO_INTEIRO_ZERO, 
			mesNasc = NUMERO_INTEIRO_ZERO, diaNasc = NUMERO_INTEIRO_ZERO;

 		// Idade.
 		int idade = NUMERO_INTEIRO_ZERO;
 		
 		if(this.getNascimento() != null){
 			nascimento.setTime(this.getNascimento());
 	 		
 			ano = agora.get(Calendar.YEAR);
 	 		mes = agora.get(Calendar.MONTH) + 1;
 	 		dia = agora.get(Calendar.DAY_OF_MONTH);
 	 		
 	 		anoNasc = nascimento.get(Calendar.YEAR);
 	 		mesNasc = nascimento.get(Calendar.MONTH) + 1;
 	 		diaNasc = nascimento.get(Calendar.DAY_OF_MONTH);
 	 		
 	 		idade = ano - anoNasc;
 	 		
 	 		// Calculando diferencas de mes e dia.
 	 		if(mes < mesNasc) {
 	 			idade--;
 	 		} else {
 	 			if(dia < diaNasc) {
 	 				idade--;
 	 			}
 	 		}
 	 		
 	 		// Ultimo teste, idade "negativa".
 	 		if(idade < NUMERO_INTEIRO_ZERO) {
 	 			idade = NUMERO_INTEIRO_ZERO;
 	 		}
 	 		
 		}

 		return (idade);		
		
	}

Ficou um pouco “tosco” mas resolve o problema.

Abraços.

[quote=jatrocha]Acabei de fazer uma pequena modificação no método que calcula a idade, fazendo com que o mesmo calcule também levando em conta o mes e o dia de nascimento.


	/**
	 * Recupera a idade.
	 * @return <b>idade.</b>
	 * @author  <b>Joao /DigitalMan/ Rocha</b>
	 * @version <b>3.0</b>
	 * @since   <b>30/05/2006</b>
	*/	
	public int getIdade() {

		// Data de hoje.
 		GregorianCalendar agora = new GregorianCalendar();
 		int ano = NUMERO_INTEIRO_ZERO, 
			mes = NUMERO_INTEIRO_ZERO, dia = NUMERO_INTEIRO_ZERO;
 		
		// Data do nascimento.
 		GregorianCalendar nascimento = new GregorianCalendar();
 		int anoNasc = NUMERO_INTEIRO_ZERO, 
			mesNasc = NUMERO_INTEIRO_ZERO, diaNasc = NUMERO_INTEIRO_ZERO;

 		// Idade.
 		int idade = NUMERO_INTEIRO_ZERO;
 		
 		if(this.getNascimento() != null){
 			nascimento.setTime(this.getNascimento());
 	 		
 			ano = agora.get(Calendar.YEAR);
 	 		mes = agora.get(Calendar.MONTH) + 1;
 	 		dia = agora.get(Calendar.DAY_OF_MONTH);
 	 		
 	 		anoNasc = nascimento.get(Calendar.YEAR);
 	 		mesNasc = nascimento.get(Calendar.MONTH) + 1;
 	 		diaNasc = nascimento.get(Calendar.DAY_OF_MONTH);
 	 		
 	 		idade = ano - anoNasc;
 	 		
 	 		// Calculando diferencas de mes e dia.
 	 		if(mes < mesNasc) {
 	 			idade--;
 	 		} else {
 	 			if(dia < diaNasc) {
 	 				idade--;
 	 			}
 	 		}
 	 		
 	 		// Ultimo teste, idade "negativa".
 	 		if(idade < NUMERO_INTEIRO_ZERO) {
 	 			idade = NUMERO_INTEIRO_ZERO;
 	 		}
 	 		
 		}

 		return (idade);		
		
	}

Ficou um pouco “tosco” mas resolve o problema.

Abraços.
[/quote]

Galera… o código acima tem um problema. Sei que o tópico é velho mas ele é o primeiro resultado no google, e hoje encontrei aqui no sistema o mesmo código, que por sinal não esta funcionando.
Afim de evitar que outras pessoas usem este código, estou ressuscitando o tópico.

Método para calcular a idade de acordo com a data:[code]/**

  • Calcula a idade de acordo com a data passada.

  • @param data

  • @return

  • @author Isaias Pfaffenseller
    */
    public static Integer getIdade(Date data) {
    Calendar dataNascimento = Calendar.getInstance();
    dataNascimento.setTime(data);
    Calendar dataAtual = Calendar.getInstance();

    Integer diferencaMes = dataAtual.get(Calendar.MONTH) - dataNascimento.get(Calendar.MONTH);
    Integer diferencaDia = dataAtual.get(Calendar.DAY_OF_MONTH) - dataNascimento.get(Calendar.DAY_OF_MONTH);
    Integer idade = (dataAtual.get(Calendar.YEAR) - dataNascimento.get(Calendar.YEAR));

    if(diferencaMes < 0 || (diferencaMes == 0 && diferencaDia < 0)) {
    idade–;
    }

    return idade;
    }[/code]



package calendar;

import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Scanner;

public class calendar {
    public static void main(String[] args) {
        //pegando a data do sistema
        Calendar cal = GregorianCalendar.getInstance();
        int diaAtual = cal.get(Calendar.DAY_OF_MONTH);
        int mesAtual = cal.get(Calendar.MONTH) + 1;
        int anoAtual = cal.get(Calendar.YEAR);

        //recebendo a data de nascimento usuario
        Scanner in = new Scanner(System.in);
        System.out.println("Dia em que você nasceu: ");
        int diaNasc = in.nextInt();
        if ((diaNasc<=0) && (diaNasc>31))
        {
            System.out.println("Dia Invalido");
        }
        else
        {
         System.out.println("Mes em que você nasceu: ");
        int mesNasc = in.nextInt();
        if ((mesNasc<=0) && (mesNasc>12))
        {
            System.out.println("Mes invalido");
        }
        else
        {
        System.out.println("Ano em que você nasceu: ");
        int anoNasc = in.nextInt();
        if ((anoNasc<=0) && (anoNasc>anoAtual))
        {
            System.out.println("Ano Invalido");
        }
        else
        {
            int Nasc = anoNasc*365;
                Nasc = Nasc+(mesNasc*31);
                Nasc = Nasc+diaNasc;
            int Atual = anoAtual*365;
                Atual = Atual+(mesAtual*31);
                Atual = Atual+diaAtual;
            
                System.out.println("Você tem "+(Atual-Nasc)+" dias ou "+((Atual-Nasc)/31)+" meses ou "+((Atual-Nasc)/365)+" anos.");
           
        }
        }
            
            
        }

  }
}  
1 curtida

[quote=isaiaspf]Método para calcular a idade de acordo com a data:[code]/**

  • Calcula a idade de acordo com a data passada.

  • @param data

  • @return

  • @author Isaias Pfaffenseller
    */
    public static Integer getIdade(Date data) {
    Calendar dataNascimento = Calendar.getInstance();
    dataNascimento.setTime(data);
    Calendar dataAtual = Calendar.getInstance();

    Integer diferencaMes = dataAtual.get(Calendar.MONTH) - dataNascimento.get(Calendar.MONTH);
    Integer diferencaDia = dataAtual.get(Calendar.DAY_OF_MONTH) - dataNascimento.get(Calendar.DAY_OF_MONTH);
    Integer idade = (dataAtual.get(Calendar.YEAR) - dataNascimento.get(Calendar.YEAR));

    if(diferencaMes < 0 || (diferencaMes == 0 && diferencaDia < 0)) {
    idade–;
    }

    return idade;
    }[/code][/quote]

Galera é chato recussitar um tópico de tantos anos, Mas se caso eu querer receber o valor de um “JDateChooser” ? já tentei de várias formas e não cheguei a uma conclusão. O que eu fiz estava contando somente os anos.

Date dataAtual = new Date();
        Date nascimento = this.jdcDataNascimento.getDate();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
        int ano1 = Integer.parseInt(sdf.format(nascimento));
        int ano2 = Integer.parseInt(sdf.format(dataAtual));
        int dif = ano2 - ano1;

Eu preciso que ele conte os anos, dias e os meses para que a contagem seja certa, assim então diminuindo a data de hoje pela data do “JDateChooser”.
Se puderem me ajudar, Agradeço …

Galera consegui resolver o problema analizando os codigos de vocês e implementando, e ficou assim.

Date dataAtual = new Date();
                Date nascimento = jdcDataNascimento.getDate();
                SimpleDateFormat sdfy = new SimpleDateFormat("yyyy");
                SimpleDateFormat sdfm = new SimpleDateFormat("MM");
                SimpleDateFormat sdfd = new SimpleDateFormat("dd");
                
                int ano1 = Integer.parseInt(sdfy.format(nascimento));
                int ano2 = Integer.parseInt(sdfy.format(dataAtual));
                int idad = ano2 - ano1;
                
                int mes1 = Integer.parseInt(sdfm.format(nascimento));
                int mes2 = Integer.parseInt(sdfm.format(dataAtual));
                
                int dia1 = Integer.parseInt(sdfd.format(nascimento));
                int dia2 = Integer.parseInt(sdfd.format(dataAtual));
                
                if (mes2 < mes1){
                	idad --;
                } else {
                  if(dia2 < dia1){
                		idad --;
                	}
                }
                
                if (idad < 18)
                {
                jtfNomePai.setVisible(true);
                jtfNomeMae.setVisible(true);
                jlNomePai.setVisible(true);
                jlNomeMae.setVisible(true);
                grav = 1;
                }
                else
                {
                jtfNomePai.setVisible(false);
                jtfNomeMae.setVisible(false);
                jlNomePai.setVisible(false);
                jlNomeMae.setVisible(false);
                } 

Olá pessoal,
fiz uma função bem enxuta, espero que ajude:

public static int getIdade(Date data) {
		Calendar cData = Calendar.getInstance();
		Calendar cHoje= Calendar.getInstance();
		cData.setTime(data);
		cData.set(Calendar.YEAR, cHoje.get(Calendar.YEAR));
		int idade = cData.after(cHoje) ? -1 : 0;
		cData.setTime(data);
		idade += cHoje.get(Calendar.YEAR) - cData.get(Calendar.YEAR);
		return idade;
	}

abraço

1 curtida

Bem resumido seu Código, e bem útil. Vlw pela outra opção.

aconselho a usar o Gregorian Calendar pois com ele vc tem varios metodos para poder extrair o que precisa.
como o jatrocha deu no exemplo.

[quote=Diguinho.Max]aconselho a usar o Gregorian Calendar pois com ele vc tem varios metodos para poder extrair o que precisa.
como o jatrocha deu no exemplo. [/quote]

Diguinho, vou dar uma pesquisada sobre o Gregorian Calendar, vc sabe algum link, ou já têm algum material bacana, se tiver pode mandar pro meu Email ? (s.rodriguesflp@gmail.com). VLW

Bom pessoa nenhum dos fontes acima funcionou comigo, não consigo usar o Calendar com o smartgwt
Então fiz esse código ai…

[code]/**
* metodo para gerar a idade apartir da data de nascimento do cliente
* @param data
* @return
*/
private String recIdadeCliente(Date dataNasc){

    if(dataNasc == null)
        return "";
    
    Date hoje = new Date();

    int idade = hoje.getYear() - dataNasc.getYear();

    if((hoje.getMonth() < dataNasc.getMonth())
            || (hoje.getMonth() == dataNasc.getMonth() && hoje.getDate() < dataNasc.getDate()))
        idade--;

  return idade + " anos";
}[/code]

Após o teste de mesa, a melhor solução é:

[code]public static void calcularIdade(String nome, Calendar dtNasc) {
Calendar dataAtual = Calendar.getInstance();

    long diaMilissegundos = 86400000;

    long idade = ((dataAtual.getTimeInMillis() - dtNasc.getTimeInMillis()) / diaMilissegundos) / 365;

    System.out.println(nome + ", sua idade é " + idade + " ano(s).");
}[/code]

[quote=marcioa1]Olá,

Alguém sabe como calcular a idade de um indivíduo ? Uso Date ou Calendar ???

Obrigado.

Márcio[/quote]

public void calidade(Date vdtanasto1) {
        Date data = new Date();   
        Calendar cal1 = Calendar.getInstance();
        Calendar cal2 = Calendar.getInstance();
        cal1.setTime(vdtanasto1); // data de nascimento
        cal2.setTime(data);
        int year1 = cal1.get(Calendar.YEAR);
        int year2 = cal2.get(Calendar.YEAR);
        int month1 = cal1.get(Calendar.MONTH);
        int month2 = cal2.get(Calendar.MONTH);
        int day1 = cal1.get(Calendar.DAY_OF_MONTH);
        int day2 = cal2.get(Calendar.DAY_OF_MONTH);
        if (day2 < day1){
           day2 = day2 + 30;
           caldia = day2 - day1;
           month2 = month2 - 1;      
        }else { 
           caldia = day2 - day1;
        }
        if (month2 < month1){
           month2 = month2 + 12;
           year2 = year2 - 1;
           calmonth = month2 - month1;
           calyear = year2 - year1;      
        }else { 
           calmonth = month2 - month1;
           calyear = year2 - year1;
        }
        month1 = month1 + 1;
        month2 = month2 + 1;
        int idade1 = (year2 - year1);
        int meses1 = (month2 - month1);
        idade.setValue(calyear);
        meses.setValue(calmonth); 
    }

Ambrozio, vai por mim, a função que eu fiz e postei, é mais confiável e nos testes de mesa, deram certo!

Estava fazendo algo parecido com vc antes, mas teve falhas.

Espero ter ajudado

Abraço

Galera consegui fazer um código muito simples e funciona perfeitamente, segue abaixo:

public int calculaIdade(String dt_nasc) {

    // Data de hoje.  
    GregorianCalendar hoje = new GregorianCalendar();
    int diah = hoje.get(Calendar.DAY_OF_MONTH);
    int mesh = hoje.get(Calendar.MONTH) + 1;
    int anoh = hoje.get(Calendar.YEAR);

    // Data do nascimento.
    int dian = Integer.valueOf(dt_nasc.substring(0,2));
    int mesn = Integer.valueOf(dt_nasc.substring(3,5));
    int anon = Integer.valueOf(dt_nasc.substring(6,10));

    // Idade.
    int idade;

    if (mesn &lt; mesh || (mesn == mesh && dian &lt;= diah))
        idade = anoh - anon;   
    else
        idade = (anoh - anon)-1;

    return (idade);
}