• ベストアンサー

生年月日と今日の日付から年齢を取得するロジック

お世話になります 生年月日 :19750401 本日の日付:20021009 の二つの情報(19750401と20021009)より年齢を取得する必要に迫られているのですが、どのようなロジックで取得できるでしょうか? 西暦同士を単純に引くだけでは正確な値ではないと思うのですが。。。 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • takaP-
  • ベストアンサー率79% (83/105)
回答No.4

皆さんが方法論を提示されましたので、私はJavaでの具体的な記述に絞って書いてみます。 先ず。 >生年月日 :19750401 >本日の日付:20021009 を、文字列と仮定します。 これを、java.util.Calendar に変換する為、今回はjava.text.SimpleDateFormat を使ってみます。 SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); Calendar birthDay = Calendar.getInstance(); birthDay.setTime(sdf.parse("19750401")); Calendar today = Calendar.getInstance(); today.setTime(sdf.parse("20021009")); これで、誕生日と本日のCalendarインスタンスが出来ます。 次に、このCalendarインスタンスの年を取得し本日から誕生日を引けば年齢がわかります。 int age = today.get(Calendar.YEAR)-birthDay.get(Calendar.YEAR); 問題は、皆さんが指摘されているように、月日によって上記の結果から -1 をしなければならないのですが、これは色々とやり方はあるとは思いますけど、今回は「何と無く」java.util.Calendar#clear() を使いました(笑 birthDay.clear(Calendar.YEAR); today.clear(Calendar.YEAR); if(birthDay.after(today)){ age-=1; } これで、age に年齢が入るものと思います。 閏年等の問題は、ここでは省きましたので後はご自身で。 上記の動作テスト用に、下記にソースのまとめます。 コマンド引数で誕生日、当日のデータを入力して下さい import java.util. * ; import java.text. * ; class HowOldAreYou { public static void main(String[] args) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); Calendar birthDay = Calendar.getInstance(); birthDay.setTime(sdf.parse(args[0])); Calendar today = Calendar.getInstance(); today.setTime(sdf.parse(args[1])); int age = today.get(Calendar.YEAR)-birthDay.get(Calendar.YEAR); birthDay.clear(Calendar.YEAR); today.clear(Calendar.YEAR); if(birthDay.after(today)) { age-=1; } System.our.println("年齢は、" + age + "歳です"); } }

takataka111
質問者

お礼

おせわになります、 具体的な記述ありがとうございます。 試してみます。 お礼が遅れましたもうしわけありません。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

#1、#2のご回答とも始め、中途より技巧が入っていますが、単純におもいつくまま下記ではどうですか。 (1)本年-生年=X年 (西暦仮定して) (2)本月>生月         Y=0 (3)本月=生月  本日>生日  Y=0           本日=生日  Y=0           本日<生日  Y=-1 (4)本月<生月         Y=-1  答え=X+Y 閏2月29日生まれを平年2月28日に満年齢到達日に するなら、 本日<生日  に修正項が必要か。      

  • nipotan
  • ベストアンサー率59% (134/227)
回答No.2

Java は勉強してないので、一応、一般的にさまざまなプログラム上で一般的にやるのは、 西暦の年 * 10000 + 月 * 100 + 日 の計算結果結果。 これはまさに、 > 生年月日 :19750401 > 本日の日付:20021009 こんなふうになりますよね。(整数値として見て) これを引いて、10000 で割った解の、「整数値」部分が年齢です。 20021009 - 19750401 = 270608 270608 / 10000 = 27.0608 この 27 が年齢になります。 こんなんじゃだめ?

  • kusukusu
  • ベストアンサー率38% (141/363)
回答No.1

[1] 単純に西暦を引き値をageに格納 [2] 04月01日2002年のUNIX時間をtime1に 10月09日2002年のUNIX時間をtime2にそれぞれ格納 [3] time1-time2<0 つまり誕生日を過ぎていなければ、ageから1を引く こんな感じでどうでしょうか?