Idade em JAVAFX, em anos, meses e dias.
Olá a todos!
Todos sabemos o quanto é difícil para o Java retornar, de modo fácil, a idade no formato: anos, meses e dias. Não estou me referindo a retornar o tempo entre duas datas em anos, o mesmo tempo em meses ou o mesmo em dias. Refiro-me a retornar quanto tempo uma determinada pessoa tem de vida, exemplo: 30 anos, 12 meses e 4 dias de vida.
Sabemos ainda que existem os anos bissextos, o que complica o cálculo em algumas situações. O JAVA não nos ajuda de modo automático, como em alguma outra linguagem.
Pensando nisso, desenvolvi um método que analisa as diversas situações e resolvi compartilhar, para outros colegas e para minhas consultas futuras. O método recebe como parâmetro uma data no formato yyyy-MM-dd (escolhi esse formato pois já vem do banco de dados) e retorna a idade no formato: 30a 4m 2d.
JAVAFX: Retornar idade em anos, meses e dias:
public String Idade(String dt_nasc) {//yyyy-MM-dd
Calendar calHoje = GregorianCalendar.getInstance();
int diah = calHoje.get(Calendar.DAY_OF_MONTH);
int mesh = calHoje.get(Calendar.MONTH) + 1;
int anoh = calHoje.get(Calendar.YEAR);
// Data do nascimento.
String[] quebraDN = dt_nasc.split("-");
int dian = Integer.valueOf(quebraDN[2]);
int mesn = Integer.valueOf(quebraDN[1]);
int anon = Integer.valueOf(quebraDN[0]);
String strNiver = anoh+"-"+mesn+"-"+dian;
Calendar calNiver = Calendar.getInstance();
try {
calNiver.setTime(new SimpleDateFormat("yyyy-MM-dd").parse(strNiver));
} catch (ParseException ex) {
Logger.getLogger(FormataData.class.getName()).log(Level.SEVERE, null, ex);
}
int anos = (calHoje.getTimeInMillis() < calNiver.getTimeInMillis())? (anoh-anon-1):anoh-anon ;
int meses;
int dias;
meses = mesh - mesn;
if (meses > 0) {//Verificando se já fez aniversário ou não
if (diah < dian) {
meses--;
}
} else if (meses < 0) {//Se o mês atual for menor que o mês do aniversário
meses = 12 + meses;//Lembrar que meses está negativo, por isso a soma;
//Da mesma forma, vamos comparar o dia atual com o dia do aniversário, para sabermos se o mês está completo ou não:
if (diah < dian) {
meses--;
}
} else {//Se o mês atual for o mês do aniversário:
if (diah<dian) {
meses = 11;
}
}
dias = diah - dian;
if (dias < 0) {//Se dia hoje menor que dia do niver, somar os dias desde o mês anterior:
if (mesh==5||mesh==7||mesh==8||mesh==10||mesh==12) {
dias = 30-dian+diah;
} else if (mesh==1||mesh==2||mesh==4||mesh==6||mesh==9||mesh==11) {
dias = 31-dian+diah;
} else {//Verificando se o ano é bissexto ou não: Esse else é para o mês 3, cujo anterior é fevereiro:
if (anoh%4 == 0) {
dias = 29-dian+diah;
} else {
dias = 28-dian+diah;
}
}
}
System.out.println(anos+"a "+meses+"m "+dias+"d");
return anos+"a "+meses+"m "+dias+"d";
}
Basta invocar o método através do evento de algum outro objeto, ou mesmo durante execução.
Divirtam-se!
Discussão (0)
Carregando comentários...