Olá,
Alguém sabe como calcular a idade de um indivíduo ? Uso Date ou Calendar ???
Obrigado.
Márcio
Olá,
Alguém sabe como calcular a idade de um indivíduo ? Uso Date ou Calendar ???
Obrigado.
Márcio
Procure no fórum por: diferença datas
Tem tópicos sobre diferença dedatas com retorno em dias, basta você mudar para anos…
[]´s
vc pode utilizar esse método…
public Integer getIdade() {
GregorianCalendar hj=new GregorianCalendar();
GregorianCalendar nascimento=new GregorianCalendar();
if(usuario.getDtNascimento()!=null){
nascimento.setTime(usuario.getDtNascimento());
}
int anohj=hj.get(Calendar.YEAR);
int anoNascimento=nascimento.get(Calendar.YEAR);
return new Integer(anohj-anoNascimento);
}
Obrigado Vegetto
Obrigado Viviane,
Vocês são uns amores.
Márcio
oi, vivi.....seu codigo ta bakana....
sistema fará uma continha assim: anohj-anonascimento.....e dara como resultado a suposta idade do ser......
mas c e fulano nasceu no fim do ano e a data atual for do começo do ano, a idade estara errada, precisa d um tratamento para os meses, tbm.........bjokas
Acabei de fazer uma pequena modificação no método que calcula a idade, fazendo com que o mesmo calcule também levando em conta o mes e o dia de nascimento.
/**
* Recupera a idade.
* @return <b>idade.</b>
* @author <b>Joao /DigitalMan/ Rocha</b>
* @version <b>3.0</b>
* @since <b>30/05/2006</b>
*/
public int getIdade() {
// Data de hoje.
GregorianCalendar agora = new GregorianCalendar();
int ano = NUMERO_INTEIRO_ZERO,
mes = NUMERO_INTEIRO_ZERO, dia = NUMERO_INTEIRO_ZERO;
// Data do nascimento.
GregorianCalendar nascimento = new GregorianCalendar();
int anoNasc = NUMERO_INTEIRO_ZERO,
mesNasc = NUMERO_INTEIRO_ZERO, diaNasc = NUMERO_INTEIRO_ZERO;
// Idade.
int idade = NUMERO_INTEIRO_ZERO;
if(this.getNascimento() != null){
nascimento.setTime(this.getNascimento());
ano = agora.get(Calendar.YEAR);
mes = agora.get(Calendar.MONTH) + 1;
dia = agora.get(Calendar.DAY_OF_MONTH);
anoNasc = nascimento.get(Calendar.YEAR);
mesNasc = nascimento.get(Calendar.MONTH) + 1;
diaNasc = nascimento.get(Calendar.DAY_OF_MONTH);
idade = ano - anoNasc;
// Calculando diferencas de mes e dia.
if(mes < mesNasc) {
idade--;
} else {
if(dia < diaNasc) {
idade--;
}
}
// Ultimo teste, idade "negativa".
if(idade < NUMERO_INTEIRO_ZERO) {
idade = NUMERO_INTEIRO_ZERO;
}
}
return (idade);
}
Ficou um pouco “tosco” mas resolve o problema.
Abraços.
[quote=jatrocha]Acabei de fazer uma pequena modificação no método que calcula a idade, fazendo com que o mesmo calcule também levando em conta o mes e o dia de nascimento.
/**
* Recupera a idade.
* @return <b>idade.</b>
* @author <b>Joao /DigitalMan/ Rocha</b>
* @version <b>3.0</b>
* @since <b>30/05/2006</b>
*/
public int getIdade() {
// Data de hoje.
GregorianCalendar agora = new GregorianCalendar();
int ano = NUMERO_INTEIRO_ZERO,
mes = NUMERO_INTEIRO_ZERO, dia = NUMERO_INTEIRO_ZERO;
// Data do nascimento.
GregorianCalendar nascimento = new GregorianCalendar();
int anoNasc = NUMERO_INTEIRO_ZERO,
mesNasc = NUMERO_INTEIRO_ZERO, diaNasc = NUMERO_INTEIRO_ZERO;
// Idade.
int idade = NUMERO_INTEIRO_ZERO;
if(this.getNascimento() != null){
nascimento.setTime(this.getNascimento());
ano = agora.get(Calendar.YEAR);
mes = agora.get(Calendar.MONTH) + 1;
dia = agora.get(Calendar.DAY_OF_MONTH);
anoNasc = nascimento.get(Calendar.YEAR);
mesNasc = nascimento.get(Calendar.MONTH) + 1;
diaNasc = nascimento.get(Calendar.DAY_OF_MONTH);
idade = ano - anoNasc;
// Calculando diferencas de mes e dia.
if(mes < mesNasc) {
idade--;
} else {
if(dia < diaNasc) {
idade--;
}
}
// Ultimo teste, idade "negativa".
if(idade < NUMERO_INTEIRO_ZERO) {
idade = NUMERO_INTEIRO_ZERO;
}
}
return (idade);
}
Ficou um pouco “tosco” mas resolve o problema.
Abraços.
[/quote]
Galera… o código acima tem um problema. Sei que o tópico é velho mas ele é o primeiro resultado no google, e hoje encontrei aqui no sistema o mesmo código, que por sinal não esta funcionando.
Afim de evitar que outras pessoas usem este código, estou ressuscitando o tópico.
Método para calcular a idade de acordo com a data:[code]/**
Calcula a idade de acordo com a data passada.
@param data
@return
@author Isaias Pfaffenseller
*/
public static Integer getIdade(Date data) {
Calendar dataNascimento = Calendar.getInstance();
dataNascimento.setTime(data);
Calendar dataAtual = Calendar.getInstance();
Integer diferencaMes = dataAtual.get(Calendar.MONTH) - dataNascimento.get(Calendar.MONTH);
Integer diferencaDia = dataAtual.get(Calendar.DAY_OF_MONTH) - dataNascimento.get(Calendar.DAY_OF_MONTH);
Integer idade = (dataAtual.get(Calendar.YEAR) - dataNascimento.get(Calendar.YEAR));
if(diferencaMes < 0 || (diferencaMes == 0 && diferencaDia < 0)) {
idade–;
}
return idade;
}[/code]
package calendar;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Scanner;
public class calendar {
public static void main(String[] args) {
//pegando a data do sistema
Calendar cal = GregorianCalendar.getInstance();
int diaAtual = cal.get(Calendar.DAY_OF_MONTH);
int mesAtual = cal.get(Calendar.MONTH) + 1;
int anoAtual = cal.get(Calendar.YEAR);
//recebendo a data de nascimento usuario
Scanner in = new Scanner(System.in);
System.out.println("Dia em que você nasceu: ");
int diaNasc = in.nextInt();
if ((diaNasc<=0) && (diaNasc>31))
{
System.out.println("Dia Invalido");
}
else
{
System.out.println("Mes em que você nasceu: ");
int mesNasc = in.nextInt();
if ((mesNasc<=0) && (mesNasc>12))
{
System.out.println("Mes invalido");
}
else
{
System.out.println("Ano em que você nasceu: ");
int anoNasc = in.nextInt();
if ((anoNasc<=0) && (anoNasc>anoAtual))
{
System.out.println("Ano Invalido");
}
else
{
int Nasc = anoNasc*365;
Nasc = Nasc+(mesNasc*31);
Nasc = Nasc+diaNasc;
int Atual = anoAtual*365;
Atual = Atual+(mesAtual*31);
Atual = Atual+diaAtual;
System.out.println("Você tem "+(Atual-Nasc)+" dias ou "+((Atual-Nasc)/31)+" meses ou "+((Atual-Nasc)/365)+" anos.");
}
}
}
}
}
[quote=isaiaspf]Método para calcular a idade de acordo com a data:[code]/**
Calcula a idade de acordo com a data passada.
@param data
@return
@author Isaias Pfaffenseller
*/
public static Integer getIdade(Date data) {
Calendar dataNascimento = Calendar.getInstance();
dataNascimento.setTime(data);
Calendar dataAtual = Calendar.getInstance();
Integer diferencaMes = dataAtual.get(Calendar.MONTH) - dataNascimento.get(Calendar.MONTH);
Integer diferencaDia = dataAtual.get(Calendar.DAY_OF_MONTH) - dataNascimento.get(Calendar.DAY_OF_MONTH);
Integer idade = (dataAtual.get(Calendar.YEAR) - dataNascimento.get(Calendar.YEAR));
if(diferencaMes < 0 || (diferencaMes == 0 && diferencaDia < 0)) {
idade–;
}
return idade;
}[/code][/quote]
Galera é chato recussitar um tópico de tantos anos, Mas se caso eu querer receber o valor de um “JDateChooser” ? já tentei de várias formas e não cheguei a uma conclusão. O que eu fiz estava contando somente os anos.
Date dataAtual = new Date();
Date nascimento = this.jdcDataNascimento.getDate();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
int ano1 = Integer.parseInt(sdf.format(nascimento));
int ano2 = Integer.parseInt(sdf.format(dataAtual));
int dif = ano2 - ano1;
Eu preciso que ele conte os anos, dias e os meses para que a contagem seja certa, assim então diminuindo a data de hoje pela data do “JDateChooser”.
Se puderem me ajudar, Agradeço …
Galera consegui resolver o problema analizando os codigos de vocês e implementando, e ficou assim.
Date dataAtual = new Date();
Date nascimento = jdcDataNascimento.getDate();
SimpleDateFormat sdfy = new SimpleDateFormat("yyyy");
SimpleDateFormat sdfm = new SimpleDateFormat("MM");
SimpleDateFormat sdfd = new SimpleDateFormat("dd");
int ano1 = Integer.parseInt(sdfy.format(nascimento));
int ano2 = Integer.parseInt(sdfy.format(dataAtual));
int idad = ano2 - ano1;
int mes1 = Integer.parseInt(sdfm.format(nascimento));
int mes2 = Integer.parseInt(sdfm.format(dataAtual));
int dia1 = Integer.parseInt(sdfd.format(nascimento));
int dia2 = Integer.parseInt(sdfd.format(dataAtual));
if (mes2 < mes1){
idad --;
} else {
if(dia2 < dia1){
idad --;
}
}
if (idad < 18)
{
jtfNomePai.setVisible(true);
jtfNomeMae.setVisible(true);
jlNomePai.setVisible(true);
jlNomeMae.setVisible(true);
grav = 1;
}
else
{
jtfNomePai.setVisible(false);
jtfNomeMae.setVisible(false);
jlNomePai.setVisible(false);
jlNomeMae.setVisible(false);
}
Olá pessoal,
fiz uma função bem enxuta, espero que ajude:
public static int getIdade(Date data) {
Calendar cData = Calendar.getInstance();
Calendar cHoje= Calendar.getInstance();
cData.setTime(data);
cData.set(Calendar.YEAR, cHoje.get(Calendar.YEAR));
int idade = cData.after(cHoje) ? -1 : 0;
cData.setTime(data);
idade += cHoje.get(Calendar.YEAR) - cData.get(Calendar.YEAR);
return idade;
}
abraço
Bem resumido seu Código, e bem útil. Vlw pela outra opção.
aconselho a usar o Gregorian Calendar pois com ele vc tem varios metodos para poder extrair o que precisa.
como o jatrocha deu no exemplo.
[quote=Diguinho.Max]aconselho a usar o Gregorian Calendar pois com ele vc tem varios metodos para poder extrair o que precisa.
como o jatrocha deu no exemplo. [/quote]
Diguinho, vou dar uma pesquisada sobre o Gregorian Calendar, vc sabe algum link, ou já têm algum material bacana, se tiver pode mandar pro meu Email ? (s.rodriguesflp@gmail.com). VLW
Bom pessoa nenhum dos fontes acima funcionou comigo, não consigo usar o Calendar com o smartgwt
Então fiz esse código ai…
[code]/**
* metodo para gerar a idade apartir da data de nascimento do cliente
* @param data
* @return
*/
private String recIdadeCliente(Date dataNasc){
if(dataNasc == null)
return "";
Date hoje = new Date();
int idade = hoje.getYear() - dataNasc.getYear();
if((hoje.getMonth() < dataNasc.getMonth())
|| (hoje.getMonth() == dataNasc.getMonth() && hoje.getDate() < dataNasc.getDate()))
idade--;
return idade + " anos";
}[/code]
Após o teste de mesa, a melhor solução é:
[code]public static void calcularIdade(String nome, Calendar dtNasc) {
Calendar dataAtual = Calendar.getInstance();
long diaMilissegundos = 86400000;
long idade = ((dataAtual.getTimeInMillis() - dtNasc.getTimeInMillis()) / diaMilissegundos) / 365;
System.out.println(nome + ", sua idade é " + idade + " ano(s).");
}[/code]
[quote=marcioa1]Olá,
Alguém sabe como calcular a idade de um indivíduo ? Uso Date ou Calendar ???
Obrigado.
Márcio[/quote]
public void calidade(Date vdtanasto1) {
Date data = new Date();
Calendar cal1 = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
cal1.setTime(vdtanasto1); // data de nascimento
cal2.setTime(data);
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);
if (day2 < day1){
day2 = day2 + 30;
caldia = day2 - day1;
month2 = month2 - 1;
}else {
caldia = day2 - day1;
}
if (month2 < month1){
month2 = month2 + 12;
year2 = year2 - 1;
calmonth = month2 - month1;
calyear = year2 - year1;
}else {
calmonth = month2 - month1;
calyear = year2 - year1;
}
month1 = month1 + 1;
month2 = month2 + 1;
int idade1 = (year2 - year1);
int meses1 = (month2 - month1);
idade.setValue(calyear);
meses.setValue(calmonth);
}
Ambrozio, vai por mim, a função que eu fiz e postei, é mais confiável e nos testes de mesa, deram certo!
Estava fazendo algo parecido com vc antes, mas teve falhas.
Espero ter ajudado
Abraço
Galera consegui fazer um código muito simples e funciona perfeitamente, segue abaixo:
public int calculaIdade(String dt_nasc) {
// Data de hoje.
GregorianCalendar hoje = new GregorianCalendar();
int diah = hoje.get(Calendar.DAY_OF_MONTH);
int mesh = hoje.get(Calendar.MONTH) + 1;
int anoh = hoje.get(Calendar.YEAR);
// Data do nascimento.
int dian = Integer.valueOf(dt_nasc.substring(0,2));
int mesn = Integer.valueOf(dt_nasc.substring(3,5));
int anon = Integer.valueOf(dt_nasc.substring(6,10));
// Idade.
int idade;
if (mesn < mesh || (mesn == mesh && dian <= diah))
idade = anoh - anon;
else
idade = (anoh - anon)-1;
return (idade);
}