
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 + "歳です");
}
}
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日に満年齢到達日に
するなら、 本日<生日 に修正項が必要か。
No.2
- 回答日時:
Java は勉強してないので、一応、一般的にさまざまなプログラム上で一般的にやるのは、
西暦の年 * 10000 + 月 * 100 + 日
の計算結果結果。
これはまさに、
> 生年月日 :19750401
> 本日の日付:20021009
こんなふうになりますよね。(整数値として見て)
これを引いて、10000 で割った解の、「整数値」部分が年齢です。
20021009 - 19750401 = 270608
270608 / 10000 = 27.0608
この 27 が年齢になります。
こんなんじゃだめ?
No.1
- 回答日時:
[1]
単純に西暦を引き値をageに格納
[2]
04月01日2002年のUNIX時間をtime1に
10月09日2002年のUNIX時間をtime2にそれぞれ格納
[3]
time1-time2<0
つまり誕生日を過ぎていなければ、ageから1を引く
こんな感じでどうでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
eclipseに記述したjavaファイル...
-
<forEach> 内で供給された "ite...
-
setAttribute(String, int)は適...
-
干支の計算で。。。
-
アルファベットのソート
-
画像の位置指定の数字を変えて...
-
Androidで画面遷移ができません.
-
ある年月の前月(月の開始日)...
-
Javaで常駐するソフトを作って...
-
ファイル名を動的に生成したい
-
「例外 *** は対応する try 文...
-
【JAVAエラー】互換性のない型...
-
IF関数でEmpty値を設定する方法。
-
オブジェクトの中のプロパティ...
-
動的配列が存在(要素が有る)か...
-
System.err. printlnとSystem.o...
-
C言語のポインターに関する警告
-
JSPやサーブレットでSystem.out...
-
javaです。 途中まで出来ている...
-
flush()とclose()について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
eclipseに記述したjavaファイル...
-
「例外 *** は対応する try 文...
-
<forEach> 内で供給された "ite...
-
setAttribute(String, int)は適...
-
干支の計算で。。。
-
生年月日と今日の日付から年齢...
-
アプレットの動作テストができない
-
importするには java.io.*; imp...
-
アプレットでスクロールバーを...
-
JPanelについて
-
Java初心者ですが・・・
-
JTableでスクロールバーが表示...
-
main()メソッドが無いコード
-
Javaで常駐するソフトを作って...
-
どうしてもプログラムが動いて...
-
ActionForm form にnullが入っ...
-
JFrame の再表示を禁止したい。
-
Javaアプリケーションのアイコ...
-
javaでスタート画面を作ってい...
-
Java Applet での虫食い算での質問
おすすめ情報