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