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歳です
以上です。