Calcular idade em Java
1. Visão geral
Neste tutorial rápido, veremos como calcular a idade usando as bibliotecas Java 8, Java 7 e Joda-Time.
Em todos os casos, pegaremos a data de nascimento e a data atual como entrada e retornaremos a idade calculada em anos.
2. Usando Java 8
Java 8 introduziua new Date-Time API para trabalhar com datas e horas, amplamente baseado na biblioteca Joda-Time.
No Java 8, podemos usarjava.time.LocalDate para nossa data de nascimento e data atual e, em seguida, usarPeriod para calcular a diferença em anos:
public int calculateAge(
LocalDate birthDate,
LocalDate currentDate) {
// validate inputs ...
return Period.between(birthDate, currentDate).getYears();
}
LocalDate is helpful here because represents just a date, em comparação com a classeDate de Java, que representa uma data e uma hora. LocalDate.now() pode nos dar a data atual.
EPeriod é útil quando precisamos pensar sobre períodos de tempo em anos, meses e dias.
Se quisermos obter uma idade mais exata, digamos em segundos, devemos dar uma olhada emLocalDateTimeeDuration, respectivamente (e talvez retornar umlong instead).
3. Usando Joda-Time
Se o Java 8 não for uma opção,we can still get the same kind of result from Joda-Time, um padrão de fato para operações de data e hora no mundo pré-Java 8.
Precisamos adicionarJoda-Time dependency ao nosso pom:
joda-time
joda-time
2.10
E então podemos escrever um método semelhante para calcular a idade, desta vez usandoLocalDateeYears deJoda-Time:
public int calculateAgeWithJodaTime(
org.joda.time.LocalDate birthDate,
org.joda.time.LocalDate currentDate) {
// validate inputs ...
Years age = Years.yearsBetween(birthDate, currentDate);
return age.getYears();
}
4. Usando Java 7
Sem uma API dedicada no Java 7, resta a nossa própria e, portanto, existem algumas abordagens.
Como exemplo, podemos usarjava.util.Date:
public int calculateAgeWithJava7(
Date birthDate,
Date currentDate) {
// validate inputs ...
DateFormat formatter = new SimpleDateFormat("yyyyMMdd");
int d1 = Integer.parseInt(formatter.format(birthDate));
int d2 = Integer.parseInt(formatter.format(currentDate));
int age = (d2 - d1) / 10000;
return age;
}
Aqui, convertemos os objetosbirthDateecurrentDate dados em inteiros e encontramos a diferença entre eles, eso long as we aren’t still on Java 7 in 8000 years, esta abordagem deve funcionar até então.
5. Conclusão
Neste artigo, mostramos como calcular a idade facilmente usando as bibliotecas Java 8, Java 7 e Joda-Time.
Para saber mais sobre o suporte data-time do Java 8, confiraour Java 8 date-time intro.
E como sempre, o código completo para esses snippets pode ser encontradoover on GitHub.