Java初心者です。年齢計算を計算したいです。
「誕生日(例えば1986/06/01)」と「特定の日(例えば2015/02/01)」の二つの日付から年齢を求めたいです。この二つの日付は変動する可能性があり、うるう年も考慮しなければなりません。
なかなか上手く計算する事が出来ません。アドバイスお願い致します。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
下記リンクの記事は、サンプルコードだけでなく考察も書かれていますので、ご一読されてはいかがでしょう。
・年齢を計算する、java.util.Calendarとjava.time.LocalDateとで - torutkの日記
投稿2015/03/08 03:54
総合スコア9388
0
ベストアンサー
基本的には前の方と同じ様にjava.util.Calendarクラスを使います.
lang
1//数値はこの前の段階で適宜解析などで取得する 2Calendar target = Calendar.getInstance(); 3//今日の日付を取るならsetメソッドは不要,Calendarクラスで月は1小さい数で表す 4target.set(2015, 2-1, 1); 5Calendar birthday = Calendar.getInstance(); 6birthday.set(1986, 6-1, 1); //誕生日の年月日をセット
1.「誕生日」と「特定の日」の「年の差」を計算します
例の場合,2015-1986=29
2.「誕生日」の「年」を「特定の日」の「年」に設定した日付(例の場合2015/06/01)と
「特定の日」を比較して,後者がよりあとの日付か両者が同日なら1.がそのまま年齢に,
そうでないなら1.の答え-1が年齢になります.
lang
1birthday.set(Calendar.YEAR, 2015); //誕生日の年を対象の年にスライド 2if(target.get(Calendar.DAY_OF_YEAR) < birthday.get(Calendar.DAY_OF_YEAR)) 3 age -= 1; //求めた年齢を1引く
Calendar.DAY_OF_YEARは「その年の何日目か」を表すフィールド値です.
Calendar.getメソッドの引数にすると「1月1日」なら「1」が,
「12月31日」なら「365(平年)」か「366(閏年)」が返ります.
Calendarクラスが便利なのは,2.の操作の時に閏年をさほど意識する必要がないという点です.
例えば,誕生日が2000年(閏年)2月29日だった場合,2.の操作で2015年に変化させた時に
Calendarクラスはこれを2015年3月1日と認識します(非厳密性).
投稿2015/03/08 05:32
編集2015/03/08 15:27総合スコア20649
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ネットで見つけたサンプルコードですが。
GregorianCalendar型からgetTimeした時間を差し引きして、
その日付を割り出してあげれば良いのかと思います。
lang
1/** 2 * 2つの日付の差を求めます。 3 * 日付文字列 strDate1 - strDate2 が何日かを返します。 4 * 5 * @param strDate1 日付文字列 yyyy/MM/dd 6 * @param strDate2 日付文字列 yyyy/MM/dd 7 * @return 2つの日付の差 8 * @throws ParseException 日付フォーマットが不正な場合 9 */ 10public static int differenceDays(String strDate1,String strDate2) 11 throws ParseException { 12 Date date1 = DateFormat.getDateInstance().parse(strDate1); 13 Date date2 = DateFormat.getDateInstance().parse(strDate2); 14 return differenceDays(date1,date2); 15} 16/** 17 * 2つの日付の差を求めます。 18 * java.util.Date 型の日付 date1 - date2 が何日かを返します。 19 * 20 * 計算方法は以下となります。 21 * 1.最初に2つの日付を long 値に変換します。 22 * ※この long 値は 1970 年 1 月 1 日 00:00:00 GMT からの 23 * 経過ミリ秒数となります。 24 * 2.次にその差を求めます。 25 * 3.上記の計算で出た数量を 1 日の時間で割ることで 26 * 日付の差を求めることができます。 27 * ※1 日 ( 24 時間) は、86,400,000 ミリ秒です。 28 * 29 * @param date1 日付 java.util.Date 30 * @param date2 日付 java.util.Date 31 * @return 2つの日付の差 32 */ 33public static int differenceDays(Date date1,Date date2) { 34 long datetime1 = date1.getTime(); 35 long datetime2 = date2.getTime(); 36 long one_date_time = 1000 * 60 * 60 * 24; 37 long diffDays = (datetime1 - datetime2) / one_date_time; 38 return (int)diffDays; 39} 40 41
投稿2015/03/08 03:50
総合スコア118
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。