Calcola l'età in Java

1. Panoramica

In questo rapido tutorial, vedremo come calcolare l'età utilizzando le librerie Java 8, Java 7 e Joda-Time.

In tutti i casi, prenderemo come input la data di nascita e la data corrente e restituiremo l'età calcolata in anni.

2. Utilizzo di Java 8

Java 8 ha introdotto una nuova API Date-Time per lavorare con date e orari, in gran parte basata sulla libreria Joda-Time.

In Java 8, possiamo utilizzare java.time.LocalDate per la nostra data di nascita e la data corrente, quindi utilizzare Period per calcolare la loro differenza in anni:

public int calculateAge( LocalDate birthDate, LocalDate currentDate) { // validate inputs ... return Period.between(birthDate, currentDate).getYears(); }

LocalDate è utile qui perché rappresenta solo una data, rispetto allaclasse Date di Java, che rappresenta sia una data che un'ora. LocalDate.now () può fornirci la data corrente.

E Period è utile quando dobbiamo pensare a periodi di tempo in anni, mesi e giorni.

Se volessimo ottenere un'età più precisa, diciamo in secondi, allora vorremmo dare un'occhiata rispettivamente a LocalDateTime e Duration (e magari restituire un long ).

3. Utilizzo di Joda-Time

Se Java 8 non è un'opzione, possiamo comunque ottenere lo stesso tipo di risultato da Joda-Time , uno standard de facto per le operazioni di data e ora nel mondo pre-Java 8.

Dobbiamo aggiungere la dipendenza Joda-Time al nostro pom:

 joda-time joda-time 2.10 

E poi possiamo scrivere un metodo simile per calcolare l'età, questa volta usando LocalDate e Years from 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. Utilizzo di Java 7

Senza un'API dedicata in Java 7, ci resta da fare la nostra, quindi ci sono diversi approcci.

Come esempio, possiamo usare 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; }

Qui, convertiamo gli oggetti birthDate e currentDate forniti in numeri interi e troviamo la differenza tra loro, e fintanto che non siamo ancora su Java 7 tra 8000 anni , questo approccio dovrebbe funzionare fino ad allora.

5. conclusione

In questo articolo, abbiamo mostrato come calcolare facilmente l'età utilizzando le librerie Java 8, Java 7 e Joda-Time.

Per ulteriori informazioni sul supporto data-ora di Java 8, dai un'occhiata alla nostra introduzione data-ora di Java 8.

E come sempre, il codice completo per questi snippet può essere trovato su GitHub.