ゆるゆるプログラミング

・生年月日から年齢を計算

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

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

CalcAge.java
001:    import java.util.Calendar;
002:    
003:    public class CalcAge {
004:    	public static void main( String[] args ) {
005:    		// 変数の宣言
006:    		int year_birth;	// 誕生日の西暦年
007:    		int month_birth;// 誕生日の月
008:    		int day_birth;	// 誕生日の日
009:    
010:    		// 入力した引数が3つ以上かを調べる
011:    		if ( 3 >args.length ) {
012:    			// 入力した引数が3つ未満の場合、使用方法を表示する
013:    			System.out.println( "CalcAge [西暦年]  [月]  [日]" );
014:    			return;
015:    		}
016:    
017:    		// 引数をint型に変換し、年/月/日に代入
018:    		try {
019:    			// args[0],args[1],args[2]を数値に変換
020:    			year_birth  = Integer.parseInt( args[ 0 ] );
021:    			month_birth = Integer.parseInt( args[ 1 ] );
022:    			day_birth   = Integer.parseInt( args[ 2 ] );
023:    		}
024:    		catch( NumberFormatException ne )
025:    		{
026:    			// args[0],args[1],args[2]のどれかが数字ではない
027:    			System.out.println( "生年月日の取得に失敗しました" );
028:    			return;
029:    		}
030:    
031:    		// 誕生日の数値チェック
032:    		if ( 0 > year_birth ) {
033:    			System.out.println( "西暦年に0以上を指定してください" );
034:    			return;
035:    		}
036:    		if ( ( 1 > month_birth ) || ( 12 < month_birth ) ) {
037:    			System.out.println( "月に1~12を指定してください" );
038:    			return;
039:    		}
040:    		if ( ( 1 > day_birth ) || ( 31 < day_birth ) ) {
041:    			System.out.println( "日に1~31を指定してください" );
042:    			return;
043:    		}
044:    
045:    		// 変数の宣言
046:    		int year_today;		// 現在の西暦年
047:    		int month_today;	// 現在の月
048:    		int day_today;		// 現在の日
049:    
050:    		// 今日の生年月日を変数に代入
051:    		Calendar calendar = Calendar.getInstance();
052:    		year_today  = calendar.get( Calendar.YEAR );
053:    		month_today = calendar.get( Calendar.MONTH ) + 1;
054:    		day_today   = calendar.get( Calendar.DAY_OF_MONTH );
055:    
056:    		// 変数の宣言
057:    		int age;	// 計算する年齢
058:    
059:    		// 年齢の計算
060:    		// 西暦年の差をageに代入
061:    		age = year_today - year_birth;
062:    		// まだ誕生月になっていなければ
063:    		if ( month_today < month_birth )
064:    			-- age;	// 1年引く
065:    		else {
066:    			// まだ誕生月日になっていなければ
067:    			if ( month_today == month_birth ) {
068:    				if ( day_birth < day_today )
069:    					-- age;	// 1年引く
070:    			}
071:    		}
072:    
073:    		// 計算結果を表示
074:    		System.out.println( "誕生日" + " "
075:    			 + year + "年" + month + "月" + day + "日" );
076:    		System.out.println( "今日" + "   "
077:    			+ year_today + "年" + month_today + "月" + day_today + "日" );
078:    		System.out.println();
079:    		System.out.println( age + "歳です" );
080:    	}
081:    }

■新着情報

2017.11.17 N値化 カラー画像をN値化する方法について解説
2017.11.16 最も近い値の取得 指定値に最も近い配列の値を取得する方法を解説
2017.10.02 アルファ値(透過) アルファ値(透過)について

■広告

法人向けのETC専用カード

~約8,000名の受講生と80社以上の導入実績~ 企業向けプログラミング研修ならCodeCamp

日本最大級ショッピングサイト!お買い物なら楽天市場

Topへ