在 Java 中计算年龄

我们经常会遇到场景,通过用户的出生日期和当前日期作为输入并返回计算的年龄(以年为单位)。

Date / SimpleDateFormat

Java 8 之前没有专用的 API,我们只能自行计算。

public int calculateAge(Date birthDate, Date currentDate) {            
    // 省略入参校验
    DateFormat formatter = new SimpleDateFormat("yyyyMMdd");                           
    int d1 = Integer.parseInt(formatter.format(birthDate));                            
    int d2 = Integer.parseInt(formatter.format(currentDate));                          
    int age = (d2 - d1) / 10000;                                                       
    return age;                                                                        
}

这里,我们将时间转换为整数,然后计算二者的差值。

LocalDate

Java 8 引入了一个新的 Date-Time API,用于处理日期和时间。

public int calculateAge(LocalDate birthDate, LocalDate currentDate) {
    // 省略入参校验
    return Period.between(birthDate, currentDate).getYears();
}

这里,我们使用 Period计算它们的差值。

如果我们想得到一个更准确的年龄,比如以秒为单位,那么我们需要分别看看 LocalDateTime 和 Duration(可能会返回一个 long 值)。

Joda-Time

如果项目中 JDK 的版本没升级到 Java8,Joda-Time 将是日期和时间库的最佳替代方案。

为了使用 Joda-Time,我们需要将它作为依赖项包含在pom.xml文件中:

<dependency>
    <groupId>joda-time</groupId>
    <artifactId>joda-time</artifactId>
    <version>2.10.14</version>
</dependency>

使用 Joda-Time 的 LocalDate 和 Years 可以计算年龄。

public int calculateAgeWithJodaTime(
  org.joda.time.LocalDate birthDate,
  org.joda.time.LocalDate currentDate) {
    // 省略入参校验
    Years age = Years.yearsBetween(birthDate, currentDate);
    return age.getYears();
}
转载请注明出处:码谱记录 » 在 Java 中计算年龄
标签: