Back-End

9 fev, 2007

Calcule a Idade Corretamente em Java

Publicidade

Algum dia você vai precisar deste código!

Em algum momento de sua vida como programador, seu sistema terá como Requisito Funcional o cálculo da idade baseado em uma data fornecida. Este micro artigo têm como objetivo apresentar uma solução pronta para o uso Ready to Use!

Pré-Requisitos:

  1. Java SE 5 (1.5) plenamente instalado e configurado
  2. NetBeans 5.5 ou a IDE de sua Preferência

Calculando a idade usando como parâmetro uma String

Ao executar o código abaixo a resposta no console terá que ser 29

Listagem 01. Classe Main.

package artigo1;

public class Main {

    public static void main(String args){
        Utils util = new Utils();
        System.out.println(util.calculaIdade("20-08-1977","dd-MM-yyyy"));
    }
}

Detalhe: conforme você verificou este método precisa de dois parâmetros:1) a data fornecida para o cálculo da idade. 2) o formato de data que você está utilizando ex: MM-dd-yyyy ou MM-yyyy-dd e etc… Acrescento ainda que este método é generalizado, isto é, pode usar qualquer formato de data e ele devolverá a idade correta.

A Listagem 02 abaixo apresenta a classe útil referenciada acima:

  • package artigo1;
  • import java.util.Date;
  • import java.text.DateFormat;
  • import java.text.SimpleDateFormat;
  • import java.util.Calendar;
  • import java.util.GregorianCalendar;
  • import java.io.*;
public class Utils {

    //Calcula a Idade baseado em String. Exemplo: calculaIdade("20/08/1977","dd/MM/yyyy");
    public static int calculaIdade(String dataNasc, String pattern){
        DateFormat sdf = new SimpleDateFormat(pattern);
        Date dataNascInput = null;
        try {
            dataNascInput= sdf.parse(dataNasc);
        } catch (Exception e) {}
        
        Calendar dateOfBirth = new GregorianCalendar();
        dateOfBirth.setTime(dataNascInput);
        
        // Cria um objeto calendar com a data atual
        Calendar today = Calendar.getInstance();
        
       // Obtém a idade baseado no ano
        int age = today.get(Calendar.YEAR) - dateOfBirth.get(Calendar.YEAR);
        
        dateOfBirth.add(Calendar.YEAR, age);
        
        if (today.before(dateOfBirth)) {
            age--;
        }
        return age;
        
    }
}

Calculando a idade usando como parâmetro um java.util.Date

A Código abaixo apresenta o mesmo método com apenas uma diferença, pode ser utilizado um objeto do tipo java.util.Date para calcular a idade.

Listagem 3:

   //Calcula a Idade baseado em java.util.Date
    public static int calculaIdade(java.util.Date dataNasc){
        Calendar dateOfBirth = new GregorianCalendar();
        dateOfBirth.setTime(dataNasc);
        
        // Cria um objeto calendar com a data atual
        Calendar today = Calendar.getInstance();
        
        // Obtém a idade baseado no ano
        int age = today.get(Calendar.YEAR) - dateOfBirth.get(Calendar.YEAR);
        
        dateOfBirth.add(Calendar.YEAR, age);
        
        //se a data de hoje é antes da data de Nascimento, então diminui 1(um)
        if (today.before(dateOfBirth)) {
            age--;
        }
        return age;
        
    }

Até a próxima.

Para Baixar o Código-Fonte Deste Artigo Clique Aqui. Ou http://br.geocities.com/consubr/artigos/Artigo1_Calcula_Idade.zip

OBS: Este artigo, bem como o código-fonte, é de livre divulgação desde que citada a fonte.