java - 如何用Java计算某人的年龄?

标签 java date calendar

我想在 Java 方法中以 int 形式返回年龄(以年为单位)。 我现在所拥有的是以下内容,其中 getBirthDate() 返回一个 Date 对象(带有出生日期;-)):

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

    Date age = new Date(ageInMillis);

    return age.getYear();
}

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

最佳答案

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。所有早期版本均已结束支持期限。

关于java - 如何用Java计算某人的年龄?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55094600/

相关文章:

java - BufferedImage 如何阻止所有图像使用最后一张图像的颜色

java - Android 没有此类文件或目录异常

Javascript 事件监听器问题

应用 DST 更改时 add() 的 java.util.GregorianCalendar 问题

angularjs - 如何仅使用 Angular 指令将元素拖放到日历中

java - SWT 表 : auto resize all columns

java - OpenJDK 不支持 javafx

javascript - 带有额外日期的工作日 Javascript

java - 获取当前年份和月份导致奇怪的结果

sql - 有没有一种简单干净的方法可以将 `DATE` 转换为 UTC 午夜该日期的 `TIMESTAMP AT TIME ZONE`?