日々精進

新しく学んだことを書き留めていきます

日本の法律では年齢は誕生日の前日に加算される

理由は以下。

満年齢は誕生日から一年が経過したら加算される。 なので日ベースでは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;
    }
}

この実装色んなところでされてると思うんだけど、検索してもコードサンプルが見付からなかった。。なんでだろ。

参考:

http://law.e-gov.go.jp/htmldata/M35/M35HO050.html

http://law.e-gov.go.jp/htmldata/M29/M29HO089.html#1001000000006000000000000000000000000000000000000000000000000000000000000000000