【Java】うるう年を判定する方法【使うのはif文のみ】

うるう年の判定方法_アイキャッチ画像 Java

「うるう年ってどうやって判定するか分からない」

「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の倍数」

コメント

タイトルとURLをコピーしました