5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

正しいうるう年(閏年)の求め方

Last updated at Posted at 2018-11-09

指定された西暦がうるう年(閏年)かどうかの求め方は知っているかな?

そのためにはまず、うるう年(閏年)の定義を確認する必要がある。

ここは日本だ。だから日本の法律を確認しよう。

日本で閏年に関する法律は、次のものである。

明治三十一年勅令第九十号(閏年ニ関スル件)

これに基づいて実装する。

まず、法律の内容を実装する前準備として 西暦神武天皇即位紀元(皇紀) に変換する必要がある。

year_kouki = year_ad + 660

さて、まず最初の部分「神武天皇即位紀元年数ノ四ヲ以テ整除シ得ヘキ年ヲ閏年トス」だけでコードにすると次のようになる。

year_kouki % 4 == 0

しかしながら、法律では「但シ~」と続く。
紀元年数ヨリ六百六十ヲ減シテ百ヲ以テ整除シ得ヘキモノ」は次の条件を満たす年のことである。

(year_kouki - 660) % 100 == 0

その続きの部分も含めて「紀元年数ヨリ六百六十ヲ減シテ百ヲ以テ整除シ得ヘキモノノ中更ニ四ヲ以テ商ヲ整除シ得サル年」は

((year_kouki - 660) % 100 == 0) and ((year_kouki - 660) // 100) % 4 != 0)

これを最初と合わせると

(year_kouki % 4 == 0) and (
    not (((year_kouki - 660) % 100 == 0) and (((year_kouki - 660) // 100) % 4 != 0)))

となる。

これを関数にすると次のようになる。

is_japanese_strict_leapyear.py

def is_japanese_strict_leapyear(year_ad):
    year_kouki = year_ad + 660
    return (year_kouki % 4 == 0) and (
        not (((year_kouki - 660) % 100 == 0) and (((year_kouki - 660) // 100) % 4 != 0)))

法律はきちんと守りましょう(ヲイ)

・・・エープリルフールネタにすればよかったか。

5
4
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?