LoginSignup
0
4

More than 1 year has passed since last update.

[Java]誕生日と現在日から年齢を求める

Posted at

はじめに

今回はユーザ入力により誕生日を取得し、現在日と比較することで年齢を計算するプログラムを考えていきます。

計算の流れ

誕生日の計算の方法は様々あるようですが、今回は「驚き早技で求めました!」みたいなものではなく、地道に計算するものとなります。
それでは早速流れを確認していきます。
1. [現在年ー生まれ年]により基準となる年齢を計算する。
2. 今年誕生日を迎えているかを判断する。
  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;
    }

}

参考ページ

Javaの日付データ型変換(Date, Calendar, String)

0
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
4