Boa tarde pessoal.
Queria apresentar na minha lista de clientes a idade de cada um.
Quando vou para a página “lista” é apresentado todos os meus clientes:
public void lista( ) {
result.include("clientes", daoFactory.getClienteDao().listaTudo());
}
E o meu DAO:
@Override
public List<Cliente> listaTudo() {
Criteria crit = this.session.createCriteria(Cliente.class);
select.addOrder(Order.asc("nome"));
return crit .list();
}
O método que testei é esse:
private static int getIdade(Cliente cliente) {
Calendar cal = GregorianCalendar.getInstance();
int anoAtual = cal.get(Calendar.YEAR);
int anoNasc = cliente.getDtNasc();
int idade = anoAtual - anoNasc;
return idade;
}
Mas como faço para usar esse método ou algo parecido em minha lista de clientes? No DAO (listaTudo) ficaria como? Faço os calculos e mostro a lista…
Aguardo uma orientação de vocês.
Passe o metodo getIdade para o seu bean Cliente e faça as seguintes alterações.
private int getIdade() {
Calendar cal = GregorianCalendar.getInstance();
int anoAtual = cal.get(Calendar.YEAR);
int anoNasc = this.getDtNasc();
int idade = anoAtual - anoNasc;
return idade;
}
Quando for mostrar os dados na tela basta fazer cliente.idade
só tem um problema você vai considerar que o dia do aniversario ainda nao chegou?
podemos estar em 2017 se eu sou de 1991 pela suas contas eu tenho 26 mas meu aniversario é 05/07 logo tenho 25
Obrigado @campelo.m funcionou legal, nem sabia que dava pra fazer algo assim rsrs.
Agora vou dar uma melhorada conforme o @Getulio_Miranda2 passou o problema da data.
Obrigado.
Aqui o resultado e funcionando:
public Integer getIdade() {
SimpleDateFormat sdfAno = new SimpleDateFormat("yyyy");
SimpleDateFormat sdfMes = new SimpleDateFormat("MM");
SimpleDateFormat sdfDia = new SimpleDateFormat("dd");
GregorianCalendar now = new GregorianCalendar();
// Pegando dia , mês e ano e atribuindo nas variaveis
int diaNow = now.get(Calendar.DAY_OF_MONTH);
int mesNow = now.get(Calendar.MONTH) + 1;
int anoNow = now.get(Calendar.YEAR);
// Fazendo parse de date para int (dia, mês e ano)
int anoNasc = Integer.parseInt(sdfAno.format(this.getDtNasc()));
int mesNasc = Integer.parseInt(sdfMes.format(this.getDtNasc()));
int diaNasc = Integer.parseInt(sdfDia.format(this.getDtNasc()));
// variavel que receberá o calculo.
int idadeCalculada;
//Fazendo as comparações e calculando
if (mesNasc < mesNow || (mesNasc == mesNow && diaNasc <= diaNow)) {
idadeCalculada = anoNow - anoNasc;
idade = idadeCalculada;
} else {
idadeCalculada = (anoNow - anoNasc) - 1;
idade = idadeCalculada;
}
return idade;
}
Outra solução seria:
public Long calcularIdade() {
final Calendar dataAtual = Calendar.getInstance();
final long diaMilissegundos = 86400000;
return ((dataAtual.getTimeInMillis() - this.getDtNasc().getTimeInMillis()) / diaMilissegundos) / 365;
}