diff --git a/hutool-core/src/main/java/cn/hutool/core/date/CalendarUtil.java b/hutool-core/src/main/java/cn/hutool/core/date/CalendarUtil.java index 7efc1e32f..efec80bd6 100644 --- a/hutool-core/src/main/java/cn/hutool/core/date/CalendarUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/date/CalendarUtil.java @@ -659,13 +659,18 @@ public class CalendarUtil { cal.setTimeInMillis(birthday); int age = year - cal.get(Calendar.YEAR); + //当前日期,则为0岁 + if (age == 0){ + return 0; + } final int monthBirth = cal.get(Calendar.MONTH); if (month == monthBirth) { final int dayOfMonthBirth = cal.get(Calendar.DAY_OF_MONTH); final boolean isLastDayOfMonthBirth = dayOfMonthBirth == cal.getActualMaximum(Calendar.DAY_OF_MONTH); - if ((false == isLastDayOfMonth || false == isLastDayOfMonthBirth) && dayOfMonth < dayOfMonthBirth) { + // issue#I6E6ZG,法定生日当天不算年龄,从第二天开始计算 + if ((false == isLastDayOfMonth || false == isLastDayOfMonthBirth) && dayOfMonth <= dayOfMonthBirth) { // 如果生日在当月,但是未达到生日当天的日期,年龄减一 age--; } diff --git a/hutool-core/src/test/java/cn/hutool/core/date/DateUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/date/DateUtilTest.java index eb874c6c3..9d2bafeff 100755 --- a/hutool-core/src/test/java/cn/hutool/core/date/DateUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/date/DateUtilTest.java @@ -1100,4 +1100,15 @@ public class DateUtilTest { Assert.assertNotNull(dateTime3); Assert.assertEquals("2021-03-17 06:31:33", dateTime3.toString()); } + + /** + * issue#I6E6ZG 法定年龄/周岁/实岁计算 + */ + @Test + public void issueI6E6ZGTest() { + // issue#I6E6ZG,法定生日当天不算年龄,从第二天开始计算 + Assert.assertEquals(70, DateUtil.age(DateUtil.parse("1952-02-14"), DateUtil.parse("2023-02-14"))); + Assert.assertEquals(71, DateUtil.age(DateUtil.parse("1952-02-13"), DateUtil.parse("2023-02-14"))); + Assert.assertEquals(0, DateUtil.age(DateUtil.parse("2023-02-14"), DateUtil.parse("2023-02-14"))); + } }