理由は以下。
満年齢は誕生日から一年が経過したら加算される。 なので日ベースでは1/2が誕生日であれば翌年1/1で一年が経過しているので1/1に年齢が加算される。 誕生日が2/29の場合閏年でもそうでない年も2/28に年齢が加算される。 Javaの場合のコードは以下。
private Date birthDate;
/**
* 指定日時点での年齢を返す.
*
* @param baseDate
* 指定日
* @return 指定日時点での年齢
*/
public int getAge(final Date baseDate) {
Calendar theDayBeforeBirthDateCal = Calendar.getInstance(Locale.JAPAN);
theDayBeforeBirthDateCal.setTime(birthDate);
// 法律上は誕生日の前日に満年齢が増えるので、誕生日の前日を使って計算する
theDayBeforeBirthDateCal.add(Calendar.DAY_OF_MONTH, -1);
Calendar baseDateCal = Calendar.getInstance(Locale.JAPAN);
baseDateCal.setTime(baseDate);
int yearDiff = baseDateCal.get(Calendar.YEAR) - theDayBeforeBirthDateCal.get(Calendar.YEAR);
// 指定日と誕生月・日を同じ年にして比較する
theDayBeforeBirthDateCal.add(Calendar.YEAR, yearDiff);
// 誕生月・日より年齢計算月・日が前であれば年齢は1歳少ない
if (baseDateCal.before(theDayBeforeBirthDateCal)) {
return yearDiff - 1;
} else {
return yearDiff;
}
}
この実装色んなところでされてると思うんだけど、検索してもコードサンプルが見付からなかった。。なんでだろ。
参考: