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 c696fc0c3..80ce668d4 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 @@ -626,7 +626,7 @@ public class CalendarUtil { } /** - * 计算相对于dateToCompare的年龄,长用于计算指定生日在某年的年龄 + * 计算相对于dateToCompare的年龄,常用于计算指定生日在某年的年龄 * * @param birthday 生日 * @param dateToCompare 需要对比的日期 @@ -649,12 +649,16 @@ public class CalendarUtil { int age = year - cal.get(Calendar.YEAR); final int monthBirth = cal.get(Calendar.MONTH); - if (month == monthBirth) { + + //当前日期,则为0岁 + if (age == 0){ + return 0; + } else 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) { - // 如果生日在当月,但是未达到生日当天的日期,年龄减一 + if ((false == isLastDayOfMonth || false == isLastDayOfMonthBirth) && dayOfMonth <= dayOfMonthBirth) { + // 如果生日在当月,但是未超过生日当天的日期,年龄减一 age--; } } else if (month < monthBirth) { diff --git a/hutool-core/src/main/java/cn/hutool/core/date/DateUtil.java b/hutool-core/src/main/java/cn/hutool/core/date/DateUtil.java index f0fa65ab5..e7df01330 100755 --- a/hutool-core/src/main/java/cn/hutool/core/date/DateUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/date/DateUtil.java @@ -1795,7 +1795,7 @@ public class DateUtil extends CalendarUtil { } /** - * 计算相对于dateToCompare的年龄,长用于计算指定生日在某年的年龄 + * 计算相对于dateToCompare的年龄,常用于计算指定生日在某年的年龄 * * @param birthday 生日 * @param dateToCompare 需要对比的日期 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 b406c2fe6..8472d077e 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 @@ -1130,4 +1130,16 @@ public class DateUtilTest { Assert.assertEquals("2021-03-17 06:31:33", dateTime3.toString()); } + /** + * issue#I6E6ZG 法定年龄/周岁/实岁计算 + */ + @Test + public void ageOfNowTest() { + DateTime concurrentDate = DateUtil.date(); + DateTime birthDay = DateUtil.offset(concurrentDate, DateField.YEAR, -71); + Assert.assertEquals(70, DateUtil.ageOfNow(birthDay)); + Assert.assertEquals(71, DateUtil.ageOfNow(DateUtil.offsetDay(birthDay, -1))); + Assert.assertEquals(0, DateUtil.ageOfNow(concurrentDate)); + } + }