最近遇到一个需求,根据孩子的出生日期,计算出孩子当前多大,要求精确到天,如“2岁8个月6天”。这里做一下记录,以防以后用到。
以下是博主从简书搜到的一篇代码,奈何找不到原链接了~~~如果作者看到了这篇文章,可联系我,我会把出处标上,如有侵权也可删除~~~
package com.dosion.smart.future.utils;
import java.util.Calendar;
import java.util.GregorianCalendar;
/**
* <p>
* 年龄工具类
* </p>
*
* @author 简书 -- copy
* @date 2019-09-06
* */
public class AgeUtil {
public static String getAgeDetail(String date){
//如果有空格
int index = date.indexOf(" ");
if (index != -1){
date = date.substring(0 , index);
}
String[] data = date.split("-");
Calendar birthday =new GregorianCalendar(Integer.valueOf(data[0]), Integer.valueOf(data[1]), Integer.valueOf(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);
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);//得到上一个月,用来得到上个月的天数。
day = day + now.getActualMaximum(Calendar.DAY_OF_MONTH);
}
if (month <0) {
month = (month +12) %12;
year--;
}
//System.out.println("年龄:" + year +"岁" + month +"月" + day +"天");
StringBuffer tag =new StringBuffer();
if (year >0) {
tag.append(year +"岁");
}
if (month >0) {
tag.append(month +"个月");
}
if (day >0) {
tag.append(day +"天");
}
if (year ==0 && month ==0 && day ==0) {
tag.append("今日出生");
}
return String.valueOf(tag);
}
}
调用示例: