Перейти к основному содержимому

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

· 3 мин. чтения

1. Обзор

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

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

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

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

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

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

LocalDate полезен здесь, потому что представляет только дату, по сравнению с Date , который представляет и дату, и время. LocalDate.now() может дать нам текущую дату.

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

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

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

Если Java 8 не подходит, мы все равно можем получить такой же результат от Joda-Time , стандарта де-факто для операций даты и времени в мире до Java 8.

Нам нужно добавить зависимость Joda-Time к нашему pom:

<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.10</version>
</dependency>

И затем мы можем написать аналогичный метод для вычисления возраста, на этот раз используя 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 в целые числа и находим разницу между ними, и до тех пор, пока мы не находимся на Java 7 через 8000 лет , этот подход должен работать до тех пор.

5. Вывод

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

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

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