最近項目里碰到個需求,有關於出生年月日計算年齡的,無奈網上搜了搜,感覺都不滿足客戶的需求只得自己動手了。
不廢話,上需求 上算法:
類似於上面這個 yyyy-MM-dd 給一個這個值 算出來了多大年齡
l 不足一月新生兒顯示日齡。
2 不足一年嬰幼兒顯示月齡+日齡,如3個月12天。
3 超過1周歲到12周歲,顯示年齡+月齡,如12歲3個月。
public static String getAgeAchen(Context context, Calendar birthday, Calendar now) throws Exception {
// Calendar birthday=new GregorianCalendar(2008,8,12);
// Calendar now=Calendar.getInstance();
// if (birthday.after(now)) {
// throw new IllegalArgumentException("Can't be born in the future");
// }
String mString = "";
int day = now.get(Calendar.DAY_OF_MONTH) - birthday.get(Calendar.DAY_OF_MONTH);
int month = now.get(Calendar.MONTH) + 1 - birthday.get(Calendar.MONTH);
int year = now.get(Calendar.YEAR) - birthday.get(Calendar.YEAR);
// 日期為當前年/月判斷
if ((year==0 && month==0 && day<0)) {
DesityUtil.showToast(context, "請選擇正確的出生年月");
return mString;
}
// 退位計算年/月/日
if (day < 0) {
month-=1;
now.add(Calendar.MONTH, -1);//得到上一個月,用來得到上個月的天數
day = day + now.getActualMaximum(Calendar.DAY_OF_MONTH);//得到該月天數
}
if (month < 0) {
year-=1;
month = month + 12;
}
// 退位計算后超過當前日期的年齡
if (year<0) {
DesityUtil.showToast(context, "請選擇正確的出生年月");
return mString;
}
// 大於一歲的
if (year > 0) {
if (year > 12) {
mString = year + "歲" ;
}else {
if (month != 0 && month != 12) {
mString = year + "歲" + month + "個月";
} else {
if (month == 12) {
year+=1;
mString = year + "歲";
} else {
mString = year + "歲";
}
}
}
}else {// 不滿一歲的
// 不滿一個月的
if (month == 0) {
mString = day + "天";
} else { // 大於一個月的
if (month == 12) {
year+=1;
mString = year + "歲";
} else {
mString = month + "月" + day + "天";
}
}
}
return mString;
}