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 .