根據生日計算年齡可以通過Calendar實現。最簡單可以考慮get(Calendar.DAY_OF_YEAR)來簡單修正年齡,但是遇到生日在閏年的2月29之后,或者今年是閏年的2月29之后可能出現計算不準,誤差一天。所以還是老實判斷年月日好了。

public?static?int?getAge(Date?birthDay)?throws?Exception?{
????????Calendar?cal?
=?Calendar.getInstance();

????????
if?(cal.before(birthDay))?{
????????????
throw?new?IllegalArgumentException(
????????????????
"The?birthDay?is?before?Now.It's?unbelievable!");
????????}

????????
int?yearNow?=?cal.get(Calendar.YEAR);
????????
int?monthNow?=?cal.get(Calendar.MONTH);
????????
int?dayOfMonthNow?=?cal.get(Calendar.DAY_OF_MONTH);
????????cal.setTime(birthDay);

????????
int?yearBirth?=?cal.get(Calendar.YEAR);
????????
int?monthBirth?=?cal.get(Calendar.MONTH);
????????
int?dayOfMonthBirth?=?cal.get(Calendar.DAY_OF_MONTH);

????????
int?age?=?yearNow?-?yearBirth;

????????
if?(monthNow?<=?monthBirth)?{
????????????
if?(monthNow?==?monthBirth)?{
????????????????
//monthNow==monthBirth
????????????????if?(dayOfMonthNow?<?dayOfMonthBirth)?{
????????????????????age
--;
????????????????}?
else?{
????????????????????
//do?nothing
????????????????}
????????????}?
else?{
????????????????
//monthNow>monthBirth
????????????????age--;
????????????}
????????}?
else?{
????????????
//monthNow<monthBirth
????????????
//donothing
????????}

????????
return?age;
????}