Рассчитать возраст в Java

Рассчитать возраст в Java

1. обзор

В этом кратком руководстве мы увидим, как рассчитать возраст с помощью библиотек Java 8, Java 7 и Joda-Time.

Во всех случаях мы будем использовать дату рождения и текущую дату в качестве входных данных и возвращать рассчитанный возраст в годах.

2. Использование Java 8

В Java 8 появилсяa new Date-Time API для работы с датой и временем, в значительной степени основанный на библиотеке Joda-Time.

В Java 8 мы можем использоватьjava.time.LocalDate для нашей даты рождения и текущей даты, а затем использоватьPeriod для вычисления их разницы в годах:

public int calculateAge(
  LocalDate birthDate,
  LocalDate currentDate) {
    // validate inputs ...
    return Period.between(birthDate, currentDate).getYears();
}

LocalDate is helpful here because represents just a date, по сравнению с классом JavaDate, который представляет как дату, так и время. LocalDate.now() может дать нам текущую дату.

ИPeriod полезен, когда нам нужно думать о периодах времени в годах, месяцах и днях.

Если бы мы хотели получить более точный возраст, скажем, в секундах, тогда мы бы хотели взглянуть наLocalDateTime иDuration соответственно (и, возможно, вместо этого вернутьlong ).

3. Использование Joda-Time

Если Java 8 не подходит,we can still get the same kind of result from Joda-Time, фактический стандарт для операций с датой и временем в мире до Java 8.

Нам нужно добавитьJoda-Time dependency в наш pom:


  joda-time
  joda-time
  2.10

А затем мы можем написать аналогичный метод для расчета возраста, на этот раз используяLocalDate иYears изJoda-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. Использование Java 7

Без выделенного API в Java 7 у нас осталось бы катиться самостоятельно, поэтому существует довольно много подходов.

В качестве одного из примеров мы можем использоватьjava.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;
}

Здесь мы конвертируем заданные объектыbirthDate иcurrentDate в целые числа и находим разницу между ними, иso long as we aren’t still on Java 7 in 8000 years, этот подход должен работать до тех пор.

5. Заключение

В этой статье мы показали, как легко рассчитать возраст, используя библиотеки Java 8, Java 7 и Joda-Time.

Чтобы узнать больше о поддержке времени передачи данных Java 8, просмотритеour Java 8 date-time intro.

И, как всегда, полный код этих фрагментов можно найтиover on GitHub.