• ベストアンサー

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

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

  • Java
  • 回答数4
  • ありがとう数2

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

  • ベストアンサー
  • 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/17068)
回答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を引く こんな感じでどうでしょうか?

関連するQ&A

  • エクセルで日付から年齢を算出する方法

    いつもお世話になっています。 生年月日と指定の日付から年齢を算出する関数はありますか? どなたかよろしくお願いします。

  • Excelで生年月日から年齢を表示する方法

    Windows XPでoffice2002を使っています。 Excel2002で、年齢を入力して、今年度の年齢を表示する方法を教えてください。すなわち、来年この表を開いた場合、その年の年齢を表示させるようにしたいのです。 例えば、以下のような項目となるものと思いますが・・・ A          B          C 生年月日(西暦表示) 今年(today関数)  年齢(=B2-A2) しかし、通常の表示方法では、C列の値は年齢ではなく、西暦が返されます。 どのように設定すれば正しい年齢が表示されるでしょうか?

  • ファイルメーカーで生年月日から年齢計算

    お世話になります。 ファイルメーカーで年齢計算をしようと思うのですが、 困った問題が生じてしまいました。 生年月日が日付ではなくテキスト形式で入力されているのです。(20030419の様な文字列) この8桁の生年月日からうまく年齢を計算できないでしょうか? テキストを日付に変換する方法を教えていただける方ご教示お願いいたします。 ちなみにファイルメーカーのverはPro5.0、OSはwinXPです。

  • エクセルで年齢を

    エクセルで名簿を作成したのですが 生年月日から年齢を引き出す 関数を教えて頂きたいのですが 宜しくお願いします。 生年月日は西暦で入力しています。 (例:1981/01/06) 2003/12/31時点で満何歳を表示したいのですが

  • 変数から日付を取得したい

    こんにちは。 日付の入った変数から年月日を別々に取得したいのです。 いろいろ調べてみたのですが方法が見つかりませんでした。 substrで取得すると一桁の月の時、「-8」と取得してしまうので 日付として取得する方法があるのなら教えて頂けますか。 $date 格納されている値→2007-08-10 00:00:00 取得したい形は 「2007」「08」「10」 PHP4です。 何か良い方法があれば、ご教授ください。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • 日付チェックの考え方

    連続投稿失礼します。 私が今悩んでいるのは、初心者ならば誰でも最初はひっかかるであろう日付チェックです。 入社年月日と生年月日をチェックしたいのですが、実装方法がわからないのは別として(調べればわかるかなぁ、なんて)、それ以前のチェックの範囲がよくわかりません。 入社年月日ならば、会社の創立日から、今日の日付までの値が有効範囲、でよいと思うのですが、生年月日となるとかなり疑問です。 有効範囲が下が西暦1年から上は西暦2003年というわけにもいきませんよね? 実際そういう値を入力しても正常に動くことは動きますけど、それによって算出した年齢が常識の範囲外になってしまいます。 そこで、今現在で妥当と思える年月を指定しても、時はどんどん流れていくので、そのたびにプログラムを修正しなくちゃいけないのか、って話になります。 なにかアドバイスをいただけると助かります。 宜しくお願い致します<(_ _)>

    • ベストアンサー
    • Java
  • VBAで日付取得

    お世話になっております。 このたびVBAを使用してWBSを作成しようと考えております。 そこで、以下のような日付取得のロジックを考えました。 ・A1セルからA100セルまで一行ずつ下へforでまわす ・日付はYYYYとMMとDDに分割したい --------------------------------------- For I = 0 To 99 セルに入力された値 = Range("A1").Offset(I).Value MsgBox セルに入力された値 '(1)2009/11/16とでます。 年だけ = Year(セルに入力された値) MsgBox 年だけ '(2)1905/03/13とでます。 NEXT ・ ・ -------------------------------------- (2)は(1)の値を変えてみても1905/03/13とでます.. (2)はなぜ2009を拾ってくれないのでしょうか。。。 ご教授ください。 宜しくお願いいたします。

  • 日付け入りスタンプの年月日

    仕事で、日付け入りスタンプを使用しているのですが、 年月日を合わせる際に疑問が2つあります。 ひとつは、年度は、2ケタなのですが、平成(23)か西暦(11) のどちらがいいのでしょうか? ちなみに、1ケタ目の数字と一緒に、’が付いています。 もうひとつは、日にちは1ケタ(1日~9日)の時、 01か-1のどちらがいいでしょうか? よろしくお願い致します。

  • 生年月日から年齢を取得する方法

    Oracle9i 9.2.0.1.0 タイトル通りなのですが、SQLで生年月日から年齢を取得する方法があればご教授ください。 (基本的な質問ですが、検索してもなかったもので申し訳ありません。)

  • excelにて生年月日から年齢を算出したいのですが、何卒宜しくお願いし

    excelにて生年月日から年齢を算出したいのですが、何卒宜しくお願いします。 生年月日が19481028というように数値で入力されています。

専門家に質問してみよう