
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ランキング
-
JTableでスクロールバーが表示...
-
どうしてもプログラムが動いて...
-
HTMLでのTableタグデータ取得方法
-
eclipseに記述したjavaファイル...
-
文字列を数式に
-
C言語のポインターに関する警告
-
IF関数でEmpty値を設定する方法。
-
ORA-01858: 数値を指定する箇所...
-
ループ処理の際、最後だけ","を...
-
System.err. printlnとSystem.o...
-
System.exit()の値を取得したい
-
動的配列が存在(要素が有る)か...
-
カタカナの小文字を大文字に変...
-
javaで質問です。 文字列2023/2...
-
1~100までの数字を表示したい
-
【C#】ハッシュテーブル(連想...
-
streamで送信されたArrayListを...
-
0dの意味を教えてください
-
VBAで配列の計算
-
[Ljava.lang.Stringってなんですか
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
eclipseに記述したjavaファイル...
-
ColabでのPytorchのエラー
-
<forEach> 内で供給された "ite...
-
「例外 *** は対応する try 文...
-
Selenium IDEでexportしたコー...
-
javaでアプレットの描画が出来ない
-
データの外挿について
-
ActionForm form にnullが入っ...
-
(急募)一覧表画面でパスワード...
-
(急募)一覧画面表示がうまくい...
-
(急募)「.csv」ファイルをテー...
-
Java での グローバルIP取得
-
シャットダウンフックが呼ばれない
-
GridBagLayoutについての質問
-
文字列を数式に
-
生年月日と今日の日付から年齢...
-
JTableでスクロールバーが表示...
-
干支の計算で。。。
-
Javaを使ってデジタル時計を作...
-
JAVA 乱数で同じ数字を出さな...
おすすめ情報