Изчислете възрастта в Java

1. Общ преглед

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

Във всички случаи ще вземем датата на раждане и текущата дата като вход и ще върнем изчислената възраст в години.

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

Java 8 представи нов 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 е полезен тук, защото представлява само дата, в сравнение скласа Date на Java, който представлява както дата, така и час. LocalDate.now () може да ни даде текущата дата.

И Периодът е полезен, когато трябва да помислим за периоди от години, месеци и дни.

Ако искахме да получим по-точна възраст, да кажем за секунди, тогава бихме искали да погледнем съответно LocalDateTime и Duration (и вместо това да върнем дълго )

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

Ако Java 8 не е опция, все още можем да получим същия вид резултат от Joda-Time , де-факто стандарт за операции дата-час в света преди Java 8.

Трябва да добавим зависимостта Joda-Time към нашия pom:

 joda-time joda-time 2.10 

И тогава можем да напишем подобен метод за изчисляване на възрастта, този път с помощта на LocalDate и години от 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.