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.