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

新手上路,请多包涵

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

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

    Date age = new Date(ageInMillis);

    return age.getYear();
}

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

原文由 nojevive 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 586
2 个回答

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。所有早期版本都已结束其支持生命周期。

原文由 duffymo 发布,翻译遵循 CC BY-SA 3.0 许可协议

查看 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 日期/时间类并且不再是最新的。

原文由 Brian Agnew 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题