我想以Java方法的整数形式返回年龄(以年为单位)。我现在所拥有的是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。所有较早的版本都已终止其支持寿命。
查看Joda,它简化了日期/时间计算(Joda还是新的标准Java日期/时间api的基础,因此你将学习即将成为标准的API)。
编辑:Java 8有一些非常相似的东西,值得一试。
例如
LocalDate birthdate = new LocalDate (1970, 1, 20); LocalDate now = new LocalDate(); Years age = Years.yearsBetween(birthdate, now);
这就像你想要的那样简单。Java 8之前的版本(如你所知)有点不直观。