根據生日計算年齡可以通過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;
????}