!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 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) {

View File

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

View File

@ -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));
}
}