• その他
    大企業と中小企業(ベンチャー企業)あなたはどっちに向いている?
    2016年1月19日
  • その他
    就活ってなにからやればいいの!?何をすればいいのかわからない!
    2016年2月5日
  • おすすめ情報
    Pebble Time Round | スマートウォッチがこんなにかっこいいはずがない
    2016年3月9日
  • 生活
    引越しの初期費用は交渉次第で半額以下になる!節約して快適な新生活を始めよう!
    2016年1月27日
  • おすすめ情報
    中学生・高校生に人気のバンドはこれだ!12選【2016年版】
    2016年4月12日
  • その他
    宝くじで3000万円当たったのに全然嬉しくない件
    2016年5月10日
  • アプリ開発
    ゲーム開発素人が1週間でFlappyBird風ゲームアプリを作ってみた【MoneyBird】
    2016年5月24日
  • 生活
    大学生のバイトは高時給なパチンコ屋がオススメ!最適なアルバイト選びで最高のキャンパスライフを
    2016年2月7日
  • おすすめ情報
    【厳選子育てアプリ4選】子育て記録もアプリを使えばこんなに手軽になる!
    2016年1月22日
  • その他
    お酒は太るってほんと?太らないお酒もある?
    2016年2月18日

javaで日付の計算をしようとした時にすごくハマってしまいました。もちろん賢い先人たちが、簡潔なコードを教えてくれているのですが、何故かうまく数が合わずにずれてしまいました。一応、参考としてコードを載せておきます。
計算が合わなくてとてもハマったコード

public static void main(Calendar birthday) {
    Calendar cal = Calendar.getInstance();
    long n = cal.getTimeInMillis() - birthday.getTimeInMillis();
    Calendar diffDay = Calendar.getInstance();
    diffDay.setTimeInMillis(n);
    int y = cal3.get(Calendar.YEAR) - 1970;
    int m = cal3.get(Calendar.MONTH) + 1;
    int d = cal3.get(Calendar.DATE);
    System.out.println(y + "歳" + m + "ヶ月" + d + "日");
}

上記は、うまく数が合わなかったコードです。やりたいことはわかるんですけど、この経過日数とかって、その間のうるう年とかうまく計算できていないんじゃないかなと思いました...賢い人、教えて...
 
そこで、自分なりに計算して作りました。

完成コード

詳細な年齢取得

private void calculateAge(Calendar birthday) {
        Calendar todayCal = Calendar.getInstance();
        int tY = todayCal.get(Calendar.YEAR);
        int tM = todayCal.get(Calendar.MONTH);
        int tD = todayCal.get(Calendar.DATE);

        int bY = birthday.get(Calendar.YEAR);
        int bM = birthday.get(Calendar.MONTH);
        int bD = birthday.get(Calendar.DATE);

        int diffY = 0;
        int diffM = 0;
        int diffD = 0;

        // 年を設定
        if (tY > bY) {
            diffY =  tY - bY;
            if (tM = bD) {
            diffD = tD - bD;
        } else {
            Calendar tmpCal = Calendar.getInstance();
            if (tM == 0) {
                tmpCal.set(tY-1, 11,bD);
            } else {
                tmpCal.set(tY, tM-1,bD);
            }
            long diff = todayCal.getTimeInMillis() - tmpCal.getTimeInMillis();
            Calendar diffCal = Calendar.getInstance();
            diffCal.setTimeInMillis(diff);
            diffD = diffCal.get(Calendar.DATE) - 1;
        }

    System.out.println(diffY + "歳" + diffM + "ヶ月" + diffD + "日");
    }

このメソッドはコピペでそのまま使えるかと思います。引数には生まれた日付をCalendar型で入れています。

これでなんとか、詳細な年齢が誤差なく取得できるようになりました!うるう年だって問題なしなはずです!!
 

アプリ開発の関連記事
  • Unityでスワイプ・フリックを取得する(多少大雑把なスワイプでもOKなように)
  • 【Unity】Unity IAP : アプリ内課金実装方法【iOS】【Android】
  • 【Xcode】Unable to install "APP NAME"の対処法【エラー error】
  • Unityの無料版でもスプラッシュ画像を変更出来るようになってる件 (ロゴが消せる!?)
  • 超簡単!Firebase Analyticsの使い方・導入方法【iOS編】
  • ゲーム開発素人が1週間でFlappyBird風ゲームアプリを作ってみた【MoneyBird】
おすすめの記事