はじめに
今回はユーザ入力により誕生日を取得し、現在日と比較することで年齢を計算するプログラムを考えていきます。
計算の流れ
誕生日の計算の方法は様々あるようですが、今回は「驚き早技で求めました!」みたいなものではなく、地道に計算するものとなります。
それでは早速流れを確認していきます。
- [現在年ー生まれ年]により基準となる年齢を計算する。
- 今年誕生日を迎えているかを判断する。
2.1. [現在月 < 誕生月]であれば年齢を−1する。
2.2. [現在月 = 誕生月]ではあるが[現在日 < 誕生日]であれば年齢−1する。
以上が、計算の流れになります。やること自体は簡単ですよね。
計算部分のコード
それでは実際に年齢計算をするコードを確認していきましょう。
今回の年齢計算メソッドは、Date型で誕生日、現在日の2つの引数をとるものとします。
最初に引数で与えられたDate型の変数をCalendar型に変換します。
その後の計算部分は全てCalendar型で行っています。
実際にコードを動かす際は、Date型やCalendar型のパッケージをインポートする必要があるのでご注意ください。
そのあたりは、まとめコードを参照してくださいね。
// 年齢を計算するメソッド(第1引数:誕生日、第2引数:現在日)
public static int calcAge(Date birthday, Date now) {
// Calendar型のインスタンス生成
Calendar calendarBirth = Calendar.getInstance();
Calendar calendarNow = Calendar.getInstance();
// Date型をCalendar型に変換する
calendarBirth.setTime(birthday);
calendarNow.setTime(now);
// (現在年ー生まれ年)で年齢の計算
int age = calendarNow.get(Calendar.YEAR) - calendarBirth.get(Calendar.YEAR);
// 誕生月を迎えていなければ年齢-1
if (calendarNow.get(Calendar.MONTH) < calendarBirth.get(Calendar.MONTH)) {
age -= 1;
}else if (calendarNow.get(Calendar.MONTH) == calendarBirth.get(Calendar.MONTH)) {
// 誕生月は迎えているが、誕生日を迎えていなければ年齢−1
if (calendarNow.get(Calendar.DATE) < calendarBirth.get(Calendar.DATE)) {
age -= 1;
}
}
return age;
}
まとめコード
CalcBirthday.java
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class CalcBirthday {
public static void main(String[] args) throws ParseException {
// Scannerクラスのインスタンス作成
java.util.Scanner scan = new java.util.Scanner(System.in);
// 誕生日を入力する
System.out.println("誕生日を入力してください(yyyy/mm/dd)");
String day = scan.next();
//日付クラスの書式を設定したSimpleDateFormatクラスのインスタンスを作成する
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
// 誕生日をDate型に変換する
Date birthday = sdf.parse(day);
//現在日時の取得
Date now = new Date();
System.out.println("年齢は" + calcAge(birthday, now) + "歳です");
}
// 年齢を計算するメソッド(第1引数:誕生日、第2引数:現在日)
public static int calcAge(Date birthday, Date now) {
// Calendar型のインスタンス生成
Calendar calendarBirth = Calendar.getInstance();
Calendar calendarNow = Calendar.getInstance();
// Date型をCalendar型に変換する
calendarBirth.setTime(birthday);
calendarNow.setTime(now);
// (現在年ー生まれ年)で年齢の計算
int age = calendarNow.get(Calendar.YEAR) - calendarBirth.get(Calendar.YEAR);
// 誕生月を迎えていなければ年齢-1
if (calendarNow.get(Calendar.MONTH) < calendarBirth.get(Calendar.MONTH)) {
age -= 1;
}else if (calendarNow.get(Calendar.MONTH) == calendarBirth.get(Calendar.MONTH)) {
// 誕生月は迎えているが、誕生日を迎えていなければ年齢−1
if (calendarNow.get(Calendar.DATE) < calendarBirth.get(Calendar.DATE)) {
age -= 1;
}
}
return age;
}
}