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で質問しましょう!
似たような質問が見つかりました
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
- 運転免許・教習所 運転免許証の裏面記載(二輪免許)について 3 2022/05/19 11:12
- 投資・株式の税金 一般口座で同一銘柄の総平均法のことで 1 2023/02/27 22:08
- 就職 先のことが不安すぎる(主に就職活動) 3 2023/06/27 09:37
- バイク免許・教習所 ゴールド免許について 1 2023/03/17 23:11
- コンサルティング・アドバイザー 台湾内での商談反故への対応策を教えて下さい。 2 2022/08/01 07:42
- メルカリ メルカリ本人確認について メルカリの本人確認 住所、氏名、電話番号、生年月日登録必要かと思います 友 2 2022/03/27 23:54
- アルバイト・パート シフト制のアルバイトの有給休暇についての質問です。 月10日程度(6年以上)勤務で有給休暇を1日も取 3 2022/06/22 17:52
- その他(お金・保険・資産運用) 社会保険料、厚生年金、住民税、雇用保険料はいつ引き落とされますか? 4/15付けで前職を退職し、4/ 5 2022/05/14 09:36
- 介護福祉士・ケアマネージャー・社会福祉士 運転免許再取得について 1 2022/04/05 18:06
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
<forEach> 内で供給された "ite...
-
eclipseに記述したjavaファイル...
-
ColabでのPytorchのエラー
-
Javaを使ってデジタル時計を作...
-
Selenium IDEでexportしたコー...
-
Javaで常駐するソフトを作って...
-
ActionForm form にnullが入っ...
-
setAttribute(String, int)は適...
-
jcpad
-
importとextendsの用い方の違い...
-
JOGLのインストール方法
-
「例外 *** は対応する try 文...
-
JavaでWindowsのタスクトレイに...
-
アプレットが初期化されていま...
-
【JAVAエラー】互換性のない型...
-
Javaを使用して定時送信をしたい
-
(急募/教えて)Java三択クイズを...
-
Javaからストアド実行(配列項目)
-
文字サイズが可変のラベル
-
【java】検索フォームの検索結...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「例外 *** は対応する try 文...
-
eclipseに記述したjavaファイル...
-
<forEach> 内で供給された "ite...
-
setAttribute(String, int)は適...
-
干支の計算で。。。
-
Javaを使ってデジタル時計を作...
-
HTMLでのTableタグデータ取得方法
-
importするには java.io.*; imp...
-
生年月日と今日の日付から年齢...
-
文字列を数式に
-
シャットダウンフックが呼ばれない
-
Javaで常駐するソフトを作って...
-
フレームの×ボタンを押しても閉...
-
Selenium IDEでexportしたコー...
-
文字サイズが可変のラベル
-
jFrameを使って複数の画面を生...
-
【java】検索フォームの検索結...
-
Java での グローバルIP取得
-
(急募)JavaカレンダーをGUI可に...
-
ファイル名を動的に生成したい
おすすめ情報