dポイントプレゼントキャンペーン実施中!

お世話になります

生年月日 :19750401
本日の日付:20021009

の二つの情報(19750401と20021009)より年齢を取得する必要に迫られているのですが、どのようなロジックで取得できるでしょうか?

西暦同士を単純に引くだけでは正確な値ではないと思うのですが。。。

宜しくお願いします。

A 回答 (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 + "歳です");
}
}
    • good
    • 0
この回答へのお礼

おせわになります、

具体的な記述ありがとうございます。
試してみます。

お礼が遅れましたもうしわけありません。

お礼日時:2002/10/21 14:57

#1、#2のご回答とも始め、中途より技巧が入っていますが、単純におもいつくまま下記ではどうですか。


(1)本年-生年=X年 (西暦仮定して)
(2)本月>生月         Y=0
(3)本月=生月  本日>生日  Y=0
          本日=生日  Y=0
          本日<生日  Y=-1
(4)本月<生月         Y=-1 
答え=X+Y
閏2月29日生まれを平年2月28日に満年齢到達日に
するなら、 本日<生日  に修正項が必要か。      
    • good
    • 0

Java は勉強してないので、一応、一般的にさまざまなプログラム上で一般的にやるのは、



西暦の年 * 10000 + 月 * 100 + 日
の計算結果結果。
これはまさに、

> 生年月日 :19750401
> 本日の日付:20021009

こんなふうになりますよね。(整数値として見て)

これを引いて、10000 で割った解の、「整数値」部分が年齢です。

20021009 - 19750401 = 270608
270608 / 10000 = 27.0608

この 27 が年齢になります。

こんなんじゃだめ?
    • good
    • 0

[1]


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

こんな感じでどうでしょうか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!