1. Обзор
В этом кратком руководстве мы увидим, как рассчитать возраст с помощью библиотек Java 8, Java 7 и Joda-Time.
Во всех случаях мы будем использовать дату рождения и текущую дату в качестве входных данных и возвращать расчетный возраст в годах.
2. Использование Java 8
Java 8 представила новый API даты и времени для работы с датами и временем, в основном основанный на библиотеке времени Joda.
В Java 8 мы можем использовать java.time.LocalDate для нашей даты рождения и текущей даты, а затем используйте Период для расчета их разницы в годах:
public int calculateAge( LocalDate birthDate, LocalDate currentDate) { // validate inputs ... return Period.between(birthDate, currentDate).getYears(); }
LocalDate полезен здесь, потому что представляет только дату, по сравнению с классом Java Date , который представляет как дату, так и время. LocalDate.now() может дать нам текущую дату.
И Период полезен, когда нам нужно подумать о временных периодах в годах, месяцах и днях.
Если бы мы хотели получить более точный возраст, скажем, в секундах , то мы бы хотели взглянуть на LocalDateTime и Duration соответственно (и, возможно, вместо этого вернуть long ).
3. Использование Joda-Времени
Если Java 8 не является вариантом, мы все равно можем получить тот же результат от Joda-Time , де-факто стандарта для операций с датой и временем в мире до Java 8.
Нам нужно добавить зависимость Joda-Time в наш pom:
joda-time joda-time 2.10
И тогда мы можем написать аналогичный метод для вычисления возраста, на этот раз используя Локальные данные и Годы из 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.Дата :
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; }
Здесь мы преобразуем заданную дату рождения и текущие данные объекты в целые числа и находим разницу между ними, и пока мы все еще не находимся на Java 7 через 8000 лет , этот подход должен работать до тех пор.
5. Заключение
В этой статье мы показали вам, как легко вычислить возраст с помощью библиотек Java 8, Java 7 и Joda-Time.
Чтобы узнать больше о поддержке времени передачи данных Java 8, ознакомьтесь с нашим введением даты и времени Java 8 .
И, как всегда, полный код для этих фрагментов можно найти на GitHub .