【Java】うるう年か判定する方法




皆さんこんにちは新米です。

今回はJavaを用いて、西暦XX年がうるう年であるか判定する方法を紹介していきます!

うるう年とはいつ起きる??

通常、2月は28日までですが、4年に1度の「うるう年」では2月に1日が追加され2月29日になります。

では、なぜうるう年はあるのでしょうか?

うるう年は暦を調節するためにあります。

現在の日本で使われている「太陽暦」の1年は、365日です。

これは地球が太陽のまわりを1周するのにかかる日数です。

 

しかし、実は1周回っていません!

 

1年につき約6時間ほど足りないのです。

つまり、4年経つと6時間×4=24時間になるため

4年に1度、1年の日数を増やします。

ただこの、調整も完璧ではありません。

1年にズレる正確な時間は5時間49分で、4年に1度

1日を増やすと11分ほどズレてしまいます。

さらなる微調整が必要なため、以下の条件が足されます。

 

うるう年になる条件

正確なうるう年の計算方法は下記の3つの条件によって計算されます。

・西暦が4で割り切れる
・ただし、4で割り切れても100で割り切れる場合を除く
・100で割り切れても400で割り切れる場合はうるう年とする



Javaでうるう年か判定する方法

先ほどのうるう年になる条件を踏まえて考えてみましょう。

うるう年の条件を1つ1つ記述すると以下のようになります。

[サンプル1]

        
        int year = 2020;

        if (year % 4 == 0) {
          // うるう年であるかはまだ分からない。
          if (year % 100 == 0) {
            // うるう年でない例外的な年である確率が高い。しかしまだ例外があるからそれを判定
            if (year % 400 == 0) {
              // 4で割り切れて100でも割り切れて400でも割り切れるため、うるう年
              System.out.print(year + "はうるう年です");
            } else {
              // 4で割り切れて100でも割り切れて400では割り切れないため、平年
              System.out.print(year + "は平年です");
            }
          } else {
            // 4で割り切れて100で割り切れないため、うるう年
            System.out.print(year + "はうるう年です");
          }
        } else {
          // 4で割り切れないため、うるう年でない、平年
          System.out.print(year + "は平年です");
        }
    }

 

これでもうるう年の判定はできますが、長々しいですね…

もっと短いコードで出来ないか、フローチャートを参考にして考えてみましょう。

 

コード短縮のコツ!

「うるう年」になる条件の組み合わせを考えてみればよいわけです。条件判定は一通りではありませんが、例えば以下のように&&(AND)や||(OR)をす買ってみましょう。

[サンプル2]
        int year = 2020;

        if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
            // うるう年である
            System.out.print(year +"はうるう年です");
        } else {
            // うるう年でない
            System.out.print(year +"は平年です");
        }

 

新米太郎
新米太郎

本当にうるう年か確認するのもアリです!

>>うるう年である西暦一覧

まとめ

いかがだったでしょうか?

このように、複数の判定条件があるものはプログラミングを記述する前に
あらかじめ判定条件を洗い出してから、コードを記述するように心がけましょう。

新米太郎
新米太郎

Pythonでも閏年の判定方法について記事にまとめてみたので
よかったら見てください!

【Python】 閏年判定を行う方法はisleap関数を使う!




コメント

  1. […] 【Java】うるう年か判定する方法今回はJavaを用いて、西暦XX年がうるう年で… […]

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