Calculo pra Retornar Idade

9 respostas
colored

Bom to Precisando fazer um calculo aki pra retornar a idade da pessoa, a partir da data q ela passar…
mas ta complicado…
eu fui juntando umas coisas da net, mas n ta dando mto certo.

public void returnIdade("String data") {
		DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
		Date d = null;
		try {
			d = df.parse(data);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		System.out.println(df.format(d));
	}

Se alguem conseguir Muito Obrigado :smiley:

9 Respostas

pmlm

Então…

Se a pessoa já fez anos este ano, tem ano_actual - ano_nascimento anos. Se ainda não fez, tem ano_actual - ano_nascimento - 1 anos.

nel

Boa tarde.

O que você está fazendo é formatando sua data. Joda Time vai lhe ajudar muito no que diz respeito a manipulação de datas.

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

Abraços.

Christian_Borges
try {
			String data = "24/06/1980";
			DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
			df.setLenient(true); //somente cria a data se a formação da mesma for correta
			Date d = null;
			d = df.parse(data);
			
			Calendar dataAtual = Calendar.getInstance();
			dataAtual.setTime(new Date());
			
			Calendar dataNascimento = Calendar.getInstance();
			dataNascimento.setTime(d);
			
			int anoNasc  = dataNascimento.get( Calendar.YEAR );		
			int anoAtual = dataAtual.get( Calendar.YEAR );
			
			int idade = (anoAtual - anoNasc);
	
			// Não fez aniversário?
			if( dataAtual.get( Calendar.MONTH ) < dataNascimento.get( Calendar.MONTH ) )
				idade = idade - 1;
			
			System.out.println( idade );  
		} catch (Exception e) {
			e.printStackTrace();
		}
pablosaraiva

Christian Borges:
// Não fez aniversário? if( dataAtual.get( Calendar.MONTH ) < dataNascimento.get( Calendar.MONTH ) ) idade = idade - 1;

Só tá comparando o mês.

Tem que comparar também o dia.

Hellmanss
public static int calcularIdade(Date data1){
		
		int idade = 0;
		Date data2 =  new Date(); 
		Calendar cal1 = Calendar.getInstance();  
		Calendar cal2 = Calendar.getInstance();  
		cal1.setTime(data1);  
		cal2.setTime(data2);  
		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);  
		idade = year2 - year1;		 
		if ( (month2 < month1)   
		 || ( (month2 == month1) && (day2 < day1) ) )
		  idade -= 1; 
		
		return idade;
	}
sergiotaborda

Compare o seu codigo

public void returnIdade("String data") {
		DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
		Date d = null;
		try {
			d = df.parse(data);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		System.out.println(df.format(d));
	}

com este

public void returnIdade(String data) {
		DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
		Date d = null;
		try {
			d = df.parse(data);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		System.out.println(df.format(d));
	}

Está vendo a diferença ?

E

Rode este programa hoje (27/11/2009). Deve imprimir:

Jose tem 11 anos
Jose tem 10 anos
Jose tem 10 anos
Jose tem 11 anos
import java.util.*;
import java.text.*;

class QuantosAnos {
    private static DateFormat dfDDMMAAAA = new SimpleDateFormat ("dd/MM/yyyy");
    public static int quantosAnos (String data) throws ParseException {
        Date dt = dfDDMMAAAA.parse (data);
        return quantosAnos (dt);
    }
    public static int quantosAnos (java.util.Date data) {
        Calendar cal = Calendar.getInstance();
        cal.setTime (data);

        Calendar calHoje = Calendar.getInstance();
        calHoje.set (Calendar.HOUR_OF_DAY, 0);
        calHoje.set (Calendar.MINUTE, 0);
        calHoje.set (Calendar.SECOND, 0);
        calHoje.set (Calendar.MILLISECOND, 0);
        int nAnos = 0;
        while (cal.compareTo (calHoje) < 0) {
            cal.add (Calendar.YEAR, +1);
            nAnos++;
        }
        return nAnos;
    }
    public static void main (String[] args) throws Exception {
        System.out.printf ("Jose tem %d anos%n", quantosAnos ("26/11/1999"));
        System.out.printf ("Jose tem %d anos%n", quantosAnos ("27/11/1999"));
        System.out.printf ("Jose tem %d anos%n", quantosAnos ("28/11/1999"));
        Date dt;
        Calendar cal = Calendar.getInstance();
        cal.set (Calendar.DAY_OF_MONTH, 26);
        cal.set (Calendar.MONTH, Calendar.NOVEMBER);
        cal.set (Calendar.YEAR, 1999);
        dt = cal.getTime();
        System.out.printf ("Jose tem %d anos%n", quantosAnos (dt));
    }
}
colored

Muito Obrigado Amigos :smiley:

Christian_Borges

Corrigido:

String data = "30/11/1980";
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
df.setLenient(false); //somente cria a data se a formação da mesma for correta
Date d = null;
d = df.parse(data);

Calendar dataAtual = Calendar.getInstance();
dataAtual.setTime(new Date());

Calendar dataNascimento = Calendar.getInstance();
dataNascimento.setTime(d);
		
Integer idade = dataAtual.get( Calendar.YEAR ) - 
                dataNascimento.get( Calendar.YEAR );

// Não fez aniversário?
if( dataAtual.get( Calendar.MONTH ) < 
	dataNascimento.get( Calendar.MONTH ) ){
	idade = idade - 1; 
}
else if( (dataAtual.get( Calendar.MONTH )==  
	      dataNascimento.get( Calendar.MONTH )) &&					
		 (dataAtual.get( Calendar.DAY_OF_MONTH ) <= 
		  dataNascimento.get( Calendar.DAY_OF_MONTH )) ){
	idade = idade - 1;				
}

System.out.println( idade );
Criado 27 de novembro de 2009
Ultima resposta 30 de nov. de 2009
Respostas 9
Participantes 8