「うるう年ってどうやって判定するか分からない」
「Javaではどうやって書けばいいの?」
と言う方のために、うるう年の判定方法と、Javaでの実現方法を解説していきます。
Javaでの実現方法だけ知りたい方は、2章に飛んでください。
うるう年に関する豆知識的なことまで知りたい方は1章から読んでもらえると幸いです。
うるう年とは?
うるう年とは、暦のズレを修正するために4年に1度、1年間の日数を1日だけ増やす年のことです。
現在、日本では「太陽暦」が使われ、1年は365日あります。
これは、地球が太陽を1周回るのにかかる日数ですが、正確に言うと1年で6時間ほど足りていません。
つまり、4年間で4×6=24時間分足りなくなっています。
そこで、4年に1度、本来28日までしかない2月に、29日を設けることで調整しているのです。
しかし、これでもまだ正確ではありません。
先ほど6時間と言いましたが、本当のズレは約5時間49分です。
そのため、うるう年で1日増やすと1年につき約11分増やしすぎていることになります。
そこで、「100で割り切れ、400で割り切れない年はうるう年にならない」というルールが定められました。
こうすることで、100年、200年、300年は4の倍数ですが、うるう年にはならず、400年に3回うるう年にならない年ができます。
本来、400年経つと、400×11=4400≒72時間分増やしすぎてしまいます。
それを400年に3回分うるう年を減らすことで、3日分減らして調整しているのです。
(さらに厳密に調整するために「うるう秒」というものもありますが、ここでは関係ないので語りません。気になる方は調べてみてください。)
うるう年を判定するJavaプログラム
うるう年は、基本的には4の倍数です。
しかし、多少のズレがあるため、そのズレを調整するため、「100で割り切れ、400で割り切れない年」はうるう年から除外されます。
言葉では分かりづらいと思うので、以下にフローチャートを示しておきます。
以下が、実際のコードです。
int year = 2020; //判定する年
if(year % 4 != 0){
//4の倍数でない場合(フローチャート①)
System.out.println(year + "年はうるう年ではありません");
}else if(year % 100 != 0){
//4の倍数であり、100の倍数でない時(フローチャート②)
System.out.println(year + "年はうるう年です");
}else if(year % 400 != 0){
//4の倍数であり、100の倍数であり、400の倍数でない(フローチャート③)
System.out.println(year + "年はうるう年ではありません");
}else{
//4の倍数であり、100の倍数であり、400の倍数である(フローチャート④)
System.out.println(year + "年はうるう年です");
}
//実行結果
//2020年はうるう年です
2020年は4の倍数であり、100の倍数ではないので、6行目からのelse if文に入ります。
そのため、実行結果は「2020年はうるう年です」となります。
まとめ
うるう年とは?
4年に1回訪れる、1年が1日多い年
うるう年の判定方法
・「4の倍数」かつ「100の倍数でない」
・「4の倍数」かつ「100の倍数」かつ「400の倍数」
コメント