如何在Java中计算某人的年龄?

2022-08-31 07:12:08

我想在Java方法中将年限作为int返回。我现在拥有的是以下情况,其中getBirthDate()返回一个Date对象(带有出生日期;-)):

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

    Date age = new Date(ageInMillis);

    return age.getYear();
}

但是由于getYear()被弃用了,我想知道是否有更好的方法来做到这一点?我甚至不确定这是否有效,因为我(还没有)任何单元测试。


答案 1

JDK 8 使这变得简单而优雅:

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;
        }
    }
}

一个 JUnit 测试来演示它的用法:

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);
    }
}

现在每个人都应该使用JDK 8。所有早期版本都已经过了其支持寿命的结束。


答案 2

看看Joda,它简化了日期/时间计算(Joda也是新标准Java日期/时间api的基础,所以你将学习一个即将成为标准的API)。

例如:

LocalDate birthdate = new LocalDate (1970, 1, 20);
LocalDate now = new LocalDate();
Years age = Years.yearsBetween(birthdate, now);

这是你想要的一样简单。Java 8之前的东西(正如你所确定的)有点不直观。

编辑:Java 8有非常相似的东西,值得一试。

编辑:这个答案早于Java 8日期/时间类,不再是最新的。