Calculo de idade

Boas a todos,

Estou fazendo um programinha em que a pessoa faz um cadastro e coloca a data de nascimento o programa mostra que os dados foram cadastrados e mostra a idade da pessoa pegando a data inserida no formulario e a data do sistema para calculo, não sei se poderia usar date…A verdade é que não tenho a minima ideia de como fazer isso date ou calendar.e como fazer…
por exemplo a pessoa nasceu em 21/03/1970…e tem a data do sistema que posso conseguir pelo java.util.date queria fazer o calculo da idade da pessoa…

se alguem puder dar algum exemplo… agradeço.

mas informaria só qntos anos ela tem ou anos/meses/dias em q ja viveu?

Diferença entre dias:

int diferença = (int) ((data2.getTime() - data1.getTime()) / (24 * 60 * 60 * 1000));

Acho que é bem por aí…

[quote=renanedpedroso]Diferença entre dias:

int diferença = (int) ((data2.getTime() - data1.getTime()) / (24 * 60 * 60 * 1000));

Acho que é bem por aí…[/quote]

Bah, e os anos bissestos?

É mais complicado do que parece, melhor você utilizar algo pronto do que perder tempo reinventando a roda(a não ser que você queira :slight_smile: ).

[code]import java.util.Scanner;

public class Exercicio
{
public static void main(String[] args)
{
Scanner leitor = new Scanner(System.in);

	int mes, ano;
	
	System.out.println("Digite o mês e o ano:");
	
	mes = leitor.nextInt();
	ano = leitor.nextInt();
	
	switch(mes)
	{
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:
			System.out.println("O mês possui 31 dias.");
			break;
		case 2:
			if ((ano % 4 == 0 && ano % 100 != 0) || (ano % 400 == 0))//Ano Bissexto
				System.out.println("O mês possui 29 dias.");
			else
				System.out.println("O mês possui 28 dias.");
			break;
		case 4:
		case 6:
		case 9:
		case 11:
			System.out.println("O mês possui 30 dias.");
			break;
		default:
			System.out.println("O mês deve estar entre 1 e 12.");
		
	}
}

}
[/code]

hehe anos bissexto

[quote=Hellmanss]

Bah, e os anos bissestos?

É mais complicado do que parece, melhor você utilizar algo pronto do que perder tempo reinventando a roda(a não ser que você queira :slight_smile: ).[/quote]

Não sei se você percebeu, mas eu não dei a resposta em anos e outra, não é tão complicado assim como você está falando…

Boas, pessoal da elite debatendo é legal(rsss) mas ajudem este pobre mortal aqui…como faço isso???´so quero calcular a data do sujeito tendo por base a data do sisetma…não entrando com duas datas…

agradeço a todos

[quote=motapaz]Boas a todos,

Estou fazendo um programinha em que a pessoa faz um cadastro e coloca a data de nascimento o programa mostra que os dados foram cadastrados e mostra a idade da pessoa pegando a data inserida no formulario e a data do sistema para calculo, não sei se poderia usar date…A verdade é que não tenho a minima ideia de como fazer isso date ou calendar.e como fazer…
por exemplo a pessoa nasceu em 21/03/1970…e tem a data do sistema que posso conseguir pelo java.util.date queria fazer o calculo da idade da pessoa…
[/quote]

Para fazer contas com datas tem que usar Calendar.

Dê uma olhada neste artigo sobre como trabalhar com datas
Veja o método daysBetween
converta para yearBewteen, em vez de calendar.add(Calendar.DATE, 1); faça calendar.add(Calendar.YEAR, 1);

public int idade(Date nascimento){

    Date agora  = new Date();
    
    final int idade =   DateUtils.yearBetween (nascimento, agora);

    return idade;
    
}

Tenha atenção que isso calcula os anos da pessoa que ela irá fazer naquele ano. Se a data ainda não chegou a pessoa tem um ano menos.

obrigado Sergio, creio que me será muito util suas dicas

Coloca isso na tua classe, se vc quiser saber a idade baseada apenas no ano de nascimento.
A classe java.util.Date está fora de uso. Ao invés, use java.util.Calendar

/**
     * Calcula a idade a partir do ano de nascimento.
     * @param anoDeNascimento ano de nascimento que será utilizado para calcular
     * a idade.
     * @return A idade da pessoa. Caso o valor informado seja inválido, retorna
     * uma flag com o valor "-1".
     */
    private final Integer calcularIdade(Integer anoDeNascimento) {
        //armazena o ano atual no formato AAAA, ano com quatro dígitos.
        Integer anoCorrente = Calendar.getInstance().get(Calendar.YEAR);
        //se o ano de nascimento não for maior que o ano atual ou menor que 1900...
        if (!((anoDeNascimento > anoCorrente) | anoDeNascimento < 1900)) {
            //armazena o ano de nascimento na classe, para posterior cálculo.
            this.anoDeNascimento = anoDeNascimento;
            //
            Integer idade = anoCorrente - anoDeNascimento;
            return idade;
        }else {
            return -1;
        }
    }

Peguei sua dúvida e fiz essa classe abaixo…
Espero que seja útil e que não tenha feito nenhuma besteira… hehehehe
Aquela exceção que o método lança é só pra fazer a vida de programador mais feliz… não reparem… hehehehe

Abraço!

import java.util.Calendar;
import java.util.Date;

public class TesteDatas {
	
	public static void main(String[] args) throws Exception {
		Calendar calendar = Calendar.getInstance();
		calendar.set(Calendar.DAY_OF_MONTH, 24);
		calendar.set(Calendar.MONTH, 2);
		calendar.set(Calendar.YEAR, 1988);

		System.out.println(calculaDataNascimento(calendar.getTime()));
		System.out.println(calculaDataNascimento(new Date()));
	}

	public static int calculaDataNascimento(Date dataNascimento) throws Exception {
		Calendar calHoje = Calendar.getInstance();
		Calendar calNascimento = Calendar.getInstance();
		calNascimento.setTime(dataNascimento);

		if (calNascimento.after(calHoje)) {
			throw new Exception("Você veio do futuro?");
		} else {
			int anoNascimento = calNascimento.get(Calendar.YEAR);
			int anoAtual = calHoje.get(Calendar.YEAR);

			calNascimento.set(Calendar.YEAR, anoAtual);
			
			// Já fez aniversário?
			if (calNascimento.getTimeInMillis() >= calHoje.getTimeInMillis()) { 
				return anoAtual - anoNascimento; 
			} else {
				return anoAtual - anoNascimento - 1;
			}
		}
	}

}