Рассчитать возраст в 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.