[RESOLVIDO] - calcular idade

5 respostas
M

Boa tarde....
Estou tendo que fazer um método que calcula a idade de um funcionário, e uma dica que eu recebi é que, subtraindo a data invertida de nascimento da data invertida de hoje e dividindo por 10000, obtêm-se a idade do funcionário. Mas eu não estou conseguindo fazer.

A classe onde tem os dados de data é essa aqui:

//importa a classe da biblioteca Java
            import java.util.GregorianCalendar;
       public class Data{
            private int dia;
            private int mes;
            private int ano;
               //---------------------------------------------
               
            // constrói o objeto Data com a data recebida no
        
             // recebidos via parâmetros
                public Data(int d, int m, int a){
                dia = d;
                mes = m;
                ano = a;
            }
            //----------------------------------------------
            
            // inteiro AAAAMMDD
                public Data(int data){
                setAno(data/10000);
                setDia(data%100);
                setMes(data/10000/100);
            }
            //----------------------------------------------
        
            // constrói o objeto Data com a data atual
               public Data(){
                GregorianCalendar c = new GregorianCalendar();
                dia = c.get(GregorianCalendar.DAY_OF_MONTH);
                mes = c.get(GregorianCalendar.MONTH)+1;
                ano = c.get(GregorianCalendar.YEAR);
            }
            //---------------------------------------------   
            
            public static boolean bissexto(int intAno) {  
              
                if ((intAno % 4 == 0 && intAno % 100 != 0) || (intAno % 400 == 0))     
                return true;     
                else     
                return false;     
              }  
               
               
            public void setDia(int dia){
                
                if (dia > 0 && dia < 32){
                   this.dia = dia;
                   }else{
                   this.dia=1;
                  }
                }
            
            
            public void setMes(int mes){
                
                if (mes > 1 && mes < 13){
                this.mes = mes;
                } else {
                    this.mes=1;
                }
            }
           
            public void setAno(int ano){
                if (ano >= 1920 && ano <= getAno()){
                this.ano = ano;
                } else {
                this.ano = getAno();
                }
            }
               
            
            // métodos de acesso aos atributos
               public int getDia(){
               return dia;
            }
            
               public int getMes(){
               return mes;
            }
            
               public int getAno(){
               return ano;
            }
            
            // retorna a data no formato padrão dd/mm/AA
                public String getDataPadrao(){
                return dia + "/" + mes + "/" + ano;
            }
            //----------------------------------------------
           
            // retorna a data como um número inteiro (ano mês, dia)
        
               public int getDataInvertida(){
               return ano * 10000 + mes * 100 + dia;
            }
            
          }//fim da classe

5 Respostas

Diego_Adriano

Cara ... muito mais simples

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

verdade, bem mais fácil…mas desse jeito que eu falei, de fazer todo o cálculo pegando as datas invertidas, tu sabe como fazer?

igor_ks

Dica 1: Como vc calcularia a sua idade?
Nao faria a data de hoje menos a data do seu nascimento?

Dica 2: Google: substração de datas em java

M

Beleza, consegui.

E

maxcanoas:
uma dica que eu recebi é que, subtraindo a data invertida de nascimento da data invertida de hoje e dividindo por 10000

“Data invertida”? Parece dica de quem usa .NET, não Java. Pelo que imagino, a tal dica é mais ou menos assim:

using System;

class Teste {
    public static void Main (string[] args) {
        // Aqui a tal "data invertida"
	DateTime dt1 = new DateTime (1825, 12, 2);
        DateTime dt2 = new DateTime (1891, 12, 5);
        // A diferença é um TimeSpan
	TimeSpan ts = dt2 - dt1;
	// Em dias, dá:
        Console.WriteLine (ts);
	// Em anos, é bem mais difícil de calcular, porque cada ano pode ter 365 ou 366 dias.
	// Pode-se usar a classe descrita em: http://www.codeproject.com/Articles/168662/Time-Period-Library-for-NET
	// Mas para ter uma idéia, o personagem histórico cujo nascimento e morte foram dados nessas
	// datas morreu com aproximadamente:
	Console.WriteLine (ts.Days / 365);
    }
}
Criado 23 de abril de 2013
Ultima resposta 23 de abr. de 2013
Respostas 5
Participantes 4