Calendarクラスを使って、引数で指定した年-2月-28日を設定し、
Calendarクラスのaddメソッドで+1日します。
一日加算したCalendarオブジェクトの月を確認し2月のままの場合はうるう年。
3月になっていれば、うるう年ではない判定を行っています。
(計算式で求める方が簡単だと思いますが…)
以下にサンプルソースおよび実行結果を記します。
本サンプルソースは、実行時にチェックしたい年を引数として渡す必要があります。
java IsLeap 年
のようになります。
以下にサンプルソースを記します。
IsLeap.java LF
import java.util.Calendar; class IsLeap { public static void usage(String[] args) { if (args.length != 1) { System.err.println("usage: java isleap <Year>"); System.exit(1); } if (!isNum(args[0])) { System.err.println(args[0] + " is not number."); System.exit(2); } } private static boolean isNum(String s) { boolean b = true; try { Integer.parseInt(s); } catch (NumberFormatException e) { b = false; } return b; } public boolean isLeap(int year) { Calendar cal = Calendar.getInstance(); cal.set(year, 1, 28); //year/2/28 (month is zero start) // System.out.println("set end of Feb: " + cal.getTime().toString()); cal.add(Calendar.DATE, +1); // System.out.println("add 1 day: " + cal.getTime().toString()); if (cal.get(Calendar.MONTH)+1 == 3) { return false; } return true; } public static void main(String[] args) { usage(args); IsLeap me = new IsLeap(); boolean leap = me.isLeap(Integer.valueOf(args[0])); if (leap) { System.out.println(args[0] + " is leap year."); } else { System.out.println(args[0] + " is *not* leap year."); } } }
以下にコンパイルおよび実行結果を記します。
$ javac IsLeap.java
$ java IsLeap usage: java isleap <Year>
$ java IsLeap 2016 2016 is leap year. $ java IsLeap 2017 2017 is *not* leap year.
$ for Y in `seq 2016 2025` > do > java IsLeap $Y > done 2016 is leap year. 2017 is *not* leap year. 2018 is *not* leap year. 2019 is *not* leap year. 2020 is leap year. 2021 is *not* leap year. 2022 is *not* leap year. 2023 is *not* leap year. 2024 is leap year. 2025 is *not* leap year.
以上、Calendarクラスをつかってうるう年かどうかを確認するサンプルソースでした。