Calcular idade em Java

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.