我们经常会遇到场景,通过用户的出生日期和当前日期作为输入并返回计算的年龄(以年为单位)。
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();
}