!935 修复法定年龄计算的BUG

Merge pull request !935 from mochouZero555/v5-dev
This commit is contained in:
Looly 2023-02-15 07:57:56 +00:00 committed by Gitee
commit 1f58e6749d
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
3 changed files with 21 additions and 5 deletions

View File

@ -626,7 +626,7 @@ public class CalendarUtil {
} }
/** /**
* 计算相对于dateToCompare的年龄用于计算指定生日在某年的年龄 * 计算相对于dateToCompare的年龄用于计算指定生日在某年的年龄
* *
* @param birthday 生日 * @param birthday 生日
* @param dateToCompare 需要对比的日期 * @param dateToCompare 需要对比的日期
@ -649,12 +649,16 @@ public class CalendarUtil {
int age = year - cal.get(Calendar.YEAR); int age = year - cal.get(Calendar.YEAR);
final int monthBirth = cal.get(Calendar.MONTH); 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 int dayOfMonthBirth = cal.get(Calendar.DAY_OF_MONTH);
final boolean isLastDayOfMonthBirth = dayOfMonthBirth == cal.getActualMaximum(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--; age--;
} }
} else if (month < monthBirth) { } else if (month < monthBirth) {

View File

@ -1795,7 +1795,7 @@ public class DateUtil extends CalendarUtil {
} }
/** /**
* 计算相对于dateToCompare的年龄用于计算指定生日在某年的年龄 * 计算相对于dateToCompare的年龄用于计算指定生日在某年的年龄
* *
* @param birthday 生日 * @param birthday 生日
* @param dateToCompare 需要对比的日期 * @param dateToCompare 需要对比的日期

View File

@ -1130,4 +1130,16 @@ public class DateUtilTest {
Assert.assertEquals("2021-03-17 06:31:33", dateTime3.toString()); 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));
}
} }