Android Javaで年齢計算

生まれてから○○歳○○ヶ月○○日ってやつ。

なかなか良いアルゴリズムが無くて。

Flash用(?)のがあったので、Java用に書き直してペタリ。

もっと効率の良い書き方とか、知ってたら直して、コメント欄に貼り付けてください!w

[2011.07.13 追記] Javaのsubstringってphpとかと違うんですね。どうりで、思うような結果が出なかった訳だ・・・。
5行目の「int iBirthM = Integer.parseInt(sYmd.substring(5,7));」のみ修正してあります。汗


/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 *  getOldメソッド
 *  @param sYmd YYYY/MM/DD形式
 *  @return Integer[]
 *  生後を取得
 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
public Integer[] getOld(String sYmd) {
    Integer[] arrOld = new Integer[3];
    Date dBirth;
    int iBirthY = Integer.parseInt(sYmd.substring(0,4));
    int iBirthM = Integer.parseInt(sYmd.substring(5,7));
    int iBirthD = Integer.parseInt(sYmd.substring(8));
    dBirth = new Date(iBirthY,iBirthM-1,iBirthD);

    Date dBirthTime = new Date(iBirthY,iBirthM-1,iBirthD);

    Calendar cl = Calendar.getInstance();
    int iCalcY = cl.get(Calendar.YEAR);
    int iCalcM = cl.get(Calendar.MONTH) + 1;
    int iCalcD = cl.get(Calendar.DAY_OF_MONTH);

    // 補正値
    int iShiftY = 0;
    int iAnsY = iCalcY - iBirthY;
    int iAnsM = iCalcM - iBirthM;
    if(iAnsM < 0) {
        iShiftY--;
    }
    iAnsM = (iAnsM + 12) % 12;
    int iAnsD = iCalcD - iBirthD;
    if(iAnsD < 0) {
        dBirth = dBirthTime;
        Calendar cal = Calendar.getInstance();
        cal.set(dBirthTime.getYear(), dBirthTime.getMonth(), dBirthTime.getDay());

        Date dLastDate = new Date(dBirthTime.getYear(),
            dBirthTime.getMonth(),
            cal.getActualMaximum(Calendar.DATE));

        iAnsD = (int) ((dLastDate.getTime() - dBirth.getTime()) / (24 * 60 * 60 * 1000) + iCalcD);
        if(iAnsM < 0) {
            iShiftY--;
        }
        iAnsM = (iAnsM + 11) % 12;
    }

    iAnsY = iAnsY + iShiftY;
    arrOld[0] = iAnsY;
    arrOld[1] = iAnsM;
    arrOld[2] = iAnsD;

    return arrOld;
}


Related Posts Plugin for WordPress, Blogger...

No Comments Yet.

Leave a Reply