生まれてから○○歳○○ヶ月○○日ってやつ。
なかなか良いアルゴリズムが無くて。
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;
}

コメント