Calculo da idade a partir do campo Data de Nascimento

8 respostas
L

O código abaixo cria um formulário (em JSP) a ser preenchido com dados pessoais da pessoa e data de nascimento. ok:

<%@ page import="java.util.Date" %>
<html>
<head>
<title>Java Server Pages</title>
</head>
<body>
<%@ include file="cabecalho.jsp" %>
<form action="recuperaInformacoes.jsp" method="post">
<p><b>Nome: <input type="text" name="nome"/>
</p>
<br/>
  Data de Nascimento: <input type="text" name="dtaNascimento"/> 
</p>
<p>Endereço: <input type="text" name="endereco"/><br/>
  </p>
<p>CEP:
  <input type="text" name="cep"/><br/>
</p>
<p>RG:
  <input type="text" name="rg"/><br/>
</p>
<p>CPF:
  <input type="text" name="cpf"/><br/>
  </p>
<p>Sexo:   
  <select name="sexo">
    <option value="Masculino">Masculino</option>
    <option value="Feminino">Feminino</option>
  </select>
</p>
<p/>
Grau de Instrução:<select name="grau_instruc">
<option value="Ensino_Fundamental">Ensino Fundamental</option>
<option value="Ensino_Médio">Ensino Médio</option>
<option value="Superior">Superior</option>
<option value="Superior_Incompleto">Superior Incompleto</option>
</select><p/>
<input type="submit" value="Enviar"/>
</form>
<%@ include file="data.jsp" %>
</body>
</html>

Este outro código exibe os dados na tela (em JSP).
Agora preciso calcular a idade da pessoa a partir da data de nascimento informada no campo data de nascimento do código anterior e fazer aparecer aqui:

<%@ page import="java.util.Date" %>
<html>
<head>
<title>Java Server Pages</title>
</head>
<body>
<%@ include file="cabecalho.jsp" %>
<p>A segui seus dados com sua idade atual: </p>
<p><br/>
<b>Nome :</b> <%=request.getParameter("nome") %> <br/> 
<p>
<b>Data de Nascimento :</b> <%=request.getParameter("dtaNascimento") %> <br/> 
<p> 
<b>Endereço :</b> <%=request.getParameter("endereco") %> <br/>
<p>
<b>CEP:</b> <%=request.getParameter("cep") %> <br/>
<p>
<b>RG:</b> <%=request.getParameter("rg") %> <br/>
<p>
<b>CPF:</b> <%=request.getParameter("cpf") %> <br/>
<p>
<b>Sexo:</b> <%=request.getParameter("sexo") %> <br/>
<p>
<b>Grau de Instrução:</b> <%=request.getParameter("grau_instruc") %> <br/>
<p><br/>
<%@ include file="data.jsp" %>
</body>
</html>

8 Respostas

M

eu numca estudei muito jsp. assim que descobri o jsf migrei.
Acho que existe um jeito pra isso:

<%
Date data = new Date();
Date nascimento = request.getParameter("dtaNascimento");
int idade =  nascimento - data;
%>
<%=idade%>

não tenho muita experiência em jsp, mas acho que o caminho é esse acima.

D

1 - Tente não usar scriptlet (código Java no meio do código jsp) e sim EL (expression language).
Exemplo:
Isso aqui: <b>CPF:</b> <%=request.getParameter("cpf") %> <br/>
Ficaria assim: <b>CPF:</b> ${param.cpf} <br/>

2 - Os operações de diferença e adição de datas não são implementados via sobrecarga de operadores, então o que o marlon disse, nunca vai funcionar (nascimento - data) e mesmo se funcionasse, teria que ser a data menos o nascimento (afinal, a data atual é maior que o nascimento).
3 - Faça o processamento da diferença das datas em um Servlet, por exemplo (formulário.jsp -> Servlet (processa dados e redireciona os parâmetros) -> exibição.jsp), ou em uma classe de controle, nunca no JSP.
4 - Para a diferença das datas e obtenção do ano você pode fazer [color=red](o código que postei estava errado, vou retirar. Veja as próximas respostas)[/color]

M

:oops:
Errei mesmo. É a data atual menos o ano de nascimento obviamente.
Legal a explicação.

Outro jeito pode ser também:

public int getIdade() {
		Calendar atual = Calendar.getInstance();
		Calendar ontem = Calendar.getInstance();
		ontem.set(Calendar.YEAR, 2009);
		
		return atual.get(Calendar.YEAR) - ontem.get(Calendar.YEAR);
	}
D

Oi Marlon,
Subtrair os anos pode não dar certo, pq a pessoa pode ter nascido dia 15/01/1980 e a data atual ser 14/01/2010, então subtraindo os anos dá 30, mas na verdade a pessoa ainda tem 29 :slight_smile:
Na verdade, até o código que passei não funciona! Agora que me toquei :oops: Já anotei lá que está errado.

O caminho é esse que você postou, só falta levar em consideração o dia e o mês.

[]´s

L

O código abaixo, parece fazer o que é necessário, mas não consigo fazer funcionar dentro do código de exibição:

Esta classe faz os procedimentos:

import java.text.DateFormat.*;  
 import java.text.ParseException.*;  
 import java.text.SimpleDateFormat.*;   
 import java.util.Date.*;  
   
   
 public class Calc_idad {  
   
     private Date dataAtual;  
     private int idade;  
   
     public Calc_idad() {  
         dataAtual = new Date(System.currentTimeMillis());  
     }  
   
     public int getIdade(String sDataUsuario) throws ParseException {  
         DateFormat df = new SimpleDateFormat("dd/MM/yyyy");  
         Date dataUsuario = df.parse(sDataUsuario);  
         idade = dataAtual.getYear() - dataUsuario.getYear();  
   
         if (dataAtual.getMonth() < dataUsuario.getMonth()) {  
             idade--;  
         } else if (dataAtual.getMonth() == dataUsuario.getMonth()) {  
             if (dataAtual.getDay() < dataUsuario.getDay()) {  
                 idade--;  
             }  
         }  
   
         return idade;  
     }  
 }

Esse seria o código colocado dentro do JSP (código para exibição dos dados):

<!-- Importanto o pacote para utilizar a classe Calc_idad --> 


<%@ page import="Calc_idade"%>  

<html>  
 . ...  
<%  
String dataUsuario = request.getParameter("dtaNascimento");  
Calc_idad Calc_idad = new Calc_idad();  
int idade = Calc_idad.getIdade(dataUsuario);  
out.println("Idade: " + idade);//escreve na página  
%>    
</html>

Só que não estou conseguindo fazer isso funcionar. Eu teria que fazer tudo num servlet? Teria que mudar tudo pra EL?

K

Em SQL, a quem interessar :

Select DateDiff(Year,Case When DatePart(dy,p.dtNascimento) >= DatePart(dy,getdate()) Then DateAdd(Year,1,p.DtNascimento) Else p.DtNascimento End,getdate())
From Tabela p

F

Usa o JodaTime

Years.between(new DateTime(dtNascimento), new DateTime());
L

Valeu caros amigos pelo auxílio e boa vontade em ajudar!

Criado 25 de setembro de 2010
Ultima resposta 13 de out. de 2010
Respostas 8
Participantes 5