Java 计算年龄

17 Mar 2025 | 6 分钟阅读

在本节中,我们将创建一个Java程序,用于根据给定的出生日期或当前日期计算年龄。

为了从当前日期或任何特定日期获取出生日期,我们应该遵循以下步骤。

  • 从用户那里读取或输入出生日期 (DOB)。
  • 将 DOB 转换为 LocalDate 对象。
  • 使用 now() 方法获取当前日期 (作为 LocalDate 对象)。
  • 使用 between() 方法确定两个日期 (DOB 和当前日期) 之间的期间 (差值)。

有以下三种计算年龄的方法:

  • 使用 Period 类
  • 使用 Enum ChronoUnit
  • 使用 Calendar 类
  • 使用 Joda 库

让我们一个一个地讨论。

使用 Period 类

Java 8 提供了Period类,它属于java.time包。它是一个不可变的类,用于表示年、月和日的(基于日期的)时间量。该类提供了各种静态方法来操作日期。为了计算年龄,Period 类提供了between()方法。

语法

该方法接受两个参数,即 LocalDate 类型的开始日期和结束日期。开始日期包含在内,但结束日期不包含在内。它返回两个日期(出生日期和当前日期)之间的期间。如果结束日期早于开始日期,它也可能返回一个负值期间。

AgeCalculatorExample1.java

输出

Enter date of birth in YYYY-MM-DD format: 1999-09-23
You are 22 years old.

我们也可以以年、月和日为单位获取年龄。以下程序演示了这一点。

CalculateAgeExample2.java

输出

Your age is 32 years 11 months and 13 days.

使用 Enum ChronoUnit

在 Java 中,ChronoUnit是一个枚举,它提供了一组标准的日期周期单位。它允许基于单元来操作日期、时间或日期时间。

ChronoUnit 枚举还提供了between()方法,该方法与 Java Period 类的 between() 方法相同。它还计算两个指定的 temporal 对象之间的时间量(以单位表示)。

语法

该方法接受类型为 Temporal 的两个参数 temporal1 和 temporal2。

在下面的程序中,我们使用了 Java LocalDate类的of()方法。该方法从年、月和日获取 LocalDate 的实例。它返回一个具有指定年、月和日期的 LocalDate。of() 方法是LocalDate.now()方法的替代方法。

AgeCalculatorExample3.java

输出

You are 26 years old.

使用 Java Calendar 类

Java Calendar 类是一个抽象类,属于 java.util 包。它提供了在特定时间点和一组日历字段(如 MONTH、YEAR、HOUR 等)之间转换日期的方法。它继承了 Object 类并实现了 Comparable 接口。

让我们使用 Calendar 类来计算年龄。

AgeCalculatorExample4.java

输出

Your age is: 33

使用 Joda 库

Joda是一个第三方库,它提供了一组持续时间字段值(如小时、分钟、天、月、年)。与其他 Java 日期和时间类一样,它也是一个不可变的日期时间类。该类的特性是它表示一个不带时区的日期。它使用ISOChronology来表示日期和时间。

在下面的程序中,我们创建了LocalDate类(org.joda.time)的两个构造函数。第一个 LocalDate 构造函数接受出生日期(dob),第二个 LocalDate 构造函数接受当前日期。

year:yyyy格式接受年份。

monthOfYear:接受 1 到 12 之间的值。

dayOfMonth:接受 1 到 31 之间的值。

我们使用了另一个不可变类YEARS。该类用于处理仅涉及年份的情况。它表示年数。要获取两个日期实例之间的年差,该类提供了yearsBetween()方法。它接受两个 LocalDate 对象作为参数。

为了获取年数,该类提供了getYears()方法。它计算这个期间代表的年数。

让我们在 Java 程序中使用上述方法。

AgeCalculatorExample5.java

输出

You are 30 years old.

我们还可以使用一些其他第三方库,如Date4JTime 4J

Date4J库的使用很简单,但在某些情况下(例如闰年)可能无法得到期望的结果。因此,评估一年中的天数并不可靠。

Time4J库是旧 Java 类(如 Date、Calendar 和 SimpleDateFormat)的完整高端替代品。它是一个用于 Java 的高级日期、时间和间隔库。

它的工作方式类似于 Java 8 解决方案。只需将LocalDate替换为PlainDates,将ChronoUnit. YEARS替换为CalendarUnit.YEARS


下一个主题JFC Java