PostDischargePatientManage/postdischarge-common/src/main/java/com/xinelu/common/utils/AgeUtil.java
2024-03-26 17:45:29 +08:00

68 lines
2.4 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.xinelu.common.utils;
import com.xinelu.common.exception.ServiceException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Calendar;
import java.util.GregorianCalendar;
/**
* @author ljh
* @version 1.0
* Create by 2023/2/27 11:45
*/
public class AgeUtil {
/**
* 根据出生日期计算年龄数值
*
* @param date 出生日期
* @return 年龄数值
*/
public static Long getAgeMonth(String date) {
if (StringUtils.isBlank(date)) {
throw new ServiceException("请输入正确的出生日期!");
}
String[] data = StringUtils.split(date, "-");
if (data.length < 3) {
throw new ServiceException("请输入正确的出生日期!");
}
Calendar birthday = new GregorianCalendar(Integer.parseInt(data[0]), Integer.parseInt(data[1]), Integer.parseInt(data[2]));
Calendar now = Calendar.getInstance();
int day = now.get(Calendar.DAY_OF_MONTH) - birthday.get(Calendar.DAY_OF_MONTH);
//月份从0开始计算所以需要+1
int month = now.get(Calendar.MONTH) + 1 - birthday.get(Calendar.MONTH);
BigDecimal monthFraction;
int year = now.get(Calendar.YEAR) - birthday.get(Calendar.YEAR);
//按照减法原理先day相减不够向month借然后month相减不够向year借最后year相减。
if (day < 0) {
month -= 1;
//得到上一个月,用来得到上个月的天数。
now.add(Calendar.MONTH, -1);
}
if (month < 0) {
//当前月份加12个月
monthFraction = BigDecimal.valueOf(month).add(BigDecimal.valueOf(12)).divide(BigDecimal.valueOf(12), 1, RoundingMode.HALF_UP);
year--;
} else {
//当前月份
monthFraction = BigDecimal.valueOf(month).divide(BigDecimal.valueOf(12), 1, RoundingMode.HALF_UP);
}
BigDecimal bigDecimal = BigDecimal.ZERO;
if (year >= 0) {
bigDecimal = bigDecimal.add(BigDecimal.valueOf(year));
}
if ((monthFraction.compareTo(BigDecimal.ZERO) > 0)) {
bigDecimal = bigDecimal.add(monthFraction);
}
//今天出生
if (year == 0 && month == 0 && day == 0) {
return BigDecimal.ZERO.longValue();
}
return Math.round(bigDecimal.doubleValue());
}
}