2015.12.15

Javaプログラミング

生年月日から年齢を計算

今、何歳(満年齢)かを生年月日から計算するプログラムを紹介します。

以下のソースコードは、いま現在の年齢を表示するもので、入力した西暦年とプログラム実行時の西暦年の差を年齢として計算しています。その際、誕生した月日がプログラムを実行した月日より後であれば、まだ今年の誕生日が来ていないので西暦年の差から更に1を引きます。この処理によって現在の年齢が計算できます。

例1)現在が2015/12/15で、誕生日が2000/4/10の場合

西暦年の差は2015-2000=15年です。次に月日を比べると誕生日の4/10は、現在の12/15より前なので既に今年の誕生日は来ています。よって、西暦差の15年から1を引かないので15歳を年齢とします。

例2)現在が2015/12/15で、誕生日が2000/12/20の場合

西暦年の差は2015-2000=15年です。次に月日を比べると誕生日の12/20は、現在の12/15の後ろなので未だ今年の誕生日は来ていません。よって、西暦差の15年から1を引いた14歳を年齢とします。

Javaソースコード

CalcAge.java

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
import java.util.Calendar;

public class CalcAge {
	public static void main( String[] args ) {
		// 変数の宣言
		int year_birth;	// 誕生日の西暦年
		int month_birth;// 誕生日の月
		int day_birth;	// 誕生日の日

		// 入力した引数が3つ以上かを調べる
		if ( 3 >args.length ) {
			// 入力した引数が3つ未満の場合、使用方法を表示する
			System.out.println( "CalcAge [西暦年]  [月]  [日]" );
			return;
		}

		// 引数をint型に変換し、年/月/日に代入
		try {
			// args[0],args[1],args[2]を数値に変換
			year_birth  = Integer.parseInt( args[ 0 ] );
			month_birth = Integer.parseInt( args[ 1 ] );
			day_birth   = Integer.parseInt( args[ 2 ] );
		}
		catch( NumberFormatException ne )
		{
			// args[0],args[1],args[2]のどれかが数字ではない
			System.out.println( "生年月日の取得に失敗しました" );
			return;
		}

		// 誕生日の数値チェック
		if ( 0 > year_birth ) {
			System.out.println( "西暦年に0以上を指定してください" );
			return;
		}
		if ( ( 1 > month_birth ) || ( 12 < month_birth ) ) {
			System.out.println( "月に1~12を指定してください" );
			return;
		}
		if ( ( 1 > day_birth ) || ( 31 < day_birth ) ) {
			System.out.println( "日に1~31を指定してください" );
			return;
		}

		// 変数の宣言
		int year_today;		// 現在の西暦年
		int month_today;	// 現在の月
		int day_today;		// 現在の日

		// 今日の生年月日を変数に代入
		Calendar calendar = Calendar.getInstance();
		year_today  = calendar.get( Calendar.YEAR );
		month_today = calendar.get( Calendar.MONTH ) + 1;
		day_today   = calendar.get( Calendar.DAY_OF_MONTH );

		// 変数の宣言
		int age;	// 計算する年齢

		// 年齢の計算
		// 西暦年の差をageに代入
		age = year_today - year_birth;
		// まだ誕生月になっていなければ
		if ( month_today < month_birth )
			-- age;	// 1年引く
		else {
			// まだ誕生月日になっていなければ
			if ( month_today == month_birth ) {
				if ( day_birth < day_today )
					-- age;	// 1年引く
			}
		}

		// 計算結果を表示
		System.out.println( "誕生日" + " "
			 + year_birth + "年" + month_birth + "月" + day_birth + "日" );
		System.out.println( "今日" + "   "
			+ year_today + "年" + month_today + "月" + day_today + "日" );
		System.out.println();
		System.out.println( age + "歳です" );
	}
}

実行結果

コンパイル ソースコードが「ANSI」の場合

C:\talavax\javasample>javac -encoding sjis CalcAge.java

コンパイル ソースコードが「UTF-8」の場合

C:\talavax\javasample>javac CalcAge.java

実行例(実行日2023年12月17日 誕生日2000年2月18日)

C:\talavax\javasample>java CalcAge 2000 2 18
誕生日 2000年2月18日
今日   2023年12月17日

23歳です

以上です。

関連コンテンツ

Javaの学習に役立つソースコードを多数紹介しています。是非、ご覧ください。

2022.09.10

西暦を与えて閏年か平年かを判定するプログラムを紹介しています。

2019.09.28

Calendarクラスを利用して、閏年か平年かを判定するプログラムを紹介しています。

2022.11.16

基本的な計算である足し算(加法)/引き算(減法)/掛け算(乗法)/割り算(除法)を行うプログラム作成。

2020.03.23

Javaを使った簡単な応用プログラム(生年月日から年齢を計算プログラムなど)を紹介しています。

2022.07.07

プログラミング、ITに関する用語をまとめています。

2022.10.17

条件式を判断して処理を分岐する方法を詳しく説明しています。

2023.03.20

変数やクラスに格納されている値をコンソール出力する方法は?

2020.03.23

メソッドを抜けるときに使用するreturn文について説明しています。

2020.03.20

プログラムの最初に実行されるメソッドは?

2022.12.13

プログラミングで使う変数って何?

2020.03.23

Javaのプログラムを書いてみませんか?プログラムの書き方をくわしく説明しています。

2020.03.23

「Javaソースコード」から実行可能な「オブジェクトコード」に変換する方法をくわしく説明しています。

2020.03.23

西暦と和暦を対応した表を掲載しています。興味のある方は、ご覧ください。

2020.03.23

広告