Search code examples
javadatecalendar

How do I calculate someone's age in Java?


I want to return an age in years as an int in a Java method. What I have now is the following where getBirthDate() returns a Date object (with the birth date ;-)):

public int getAge() {
    long ageInMillis = new Date().getTime() - getBirthDate().getTime();

    Date age = new Date(ageInMillis);

    return age.getYear();
}

But since getYear() is deprecated I'm wondering if there is a better way to do this? I'm not even sure this works correctly, since I have no unit tests in place (yet).


Solution

  • JDK 8 makes this easy and elegant:

    public class AgeCalculator {
    
        public static int calculateAge(LocalDate birthDate, LocalDate currentDate) {
            if ((birthDate != null) && (currentDate != null)) {
                return Period.between(birthDate, currentDate).getYears();
            } else {
                return 0;
            }
        }
    }
    

    A JUnit test to demonstrate its use:

    public class AgeCalculatorTest {
    
        @Test
        public void testCalculateAge_Success() {
            // setup
            LocalDate birthDate = LocalDate.of(1961, 5, 17);
            // exercise
            int actual = AgeCalculator.calculateAge(birthDate, LocalDate.of(2016, 7, 12));
            // assert
            Assert.assertEquals(55, actual);
        }
    }
    

    Everyone should be using JDK 8 by now. All earlier versions have passed the end of their support lives.