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クラスをつかってうるう年かどうかを確認するサンプルソースでした。