最近遇到一个需求,根据孩子的出生日期,计算出孩子当前多大,要求精确到天,如“2岁8个月6天”。这里做一下记录,以防以后用到。

以下是博主从简书搜到的一篇代码,奈何找不到原链接了~~~如果作者看到了这篇文章,可联系我,我会把出处标上,如有侵权也可删除~~~

package com.dosion.smart.future.utils;

import java.util.Calendar;

import java.util.GregorianCalendar;

/**

*

* 年龄工具类

*

*

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

}

}

调用示例:

39b584582082c538f9fc2a2ba0a41ca1.png

7d89720642dd7fda754e328e48ed8b3a.png

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐