Yuta NakataのBlog

Python / AWS / ITについて役立つ情報を発信します

うるう年の計算はPythonに任せよう

サマリー

  • うるう年に伴う計算(日数計算や月合計時間の計算)は自前で書かない(calenderライブラリを使う)
  • うるう年の定義は正確には4年に1回ではないので、ロジックミスが起きる
  • 自前で作ると、コードの可読性が下がるので、レビューがしずらい

うるう年の定義

そもそもうるう年とは?

うるう年とは、一言で言うと、1年が366日となる年のことを指します。

この追加された1日は、2月29日として知られています。

定義

よく云われるうるう年は、4年に1回は間違いです。

正確には、

  • 西暦年号が4で割り切れる年は、うるう年
  • ただし、西暦年号が100で割り切れる年は、通常は平年です。
  • しかし、西暦年号が400で割り切れる年は、うるう年です。

です。

実は面倒な定義なのです。

うるう年の計算をしてみる

自前でコードを書いた場合

Pythonで上記のロジックを実装し、うるう年を計算するスクリプトを書いてみます。

def is_leap_year(year: int) -> bool:
    if year % 4 == 0:
        if year % 100 == 0:
            if year % 400 == 0:
                return True
            else:
                return False
        else:
            return True
    else:
        return False

3重ループとなっており、可読性が低下しています。

ライブラリを使った場合

calenderライブラリを使って計算してみます。

import calendar

year = 2000
calendar.isleap(year)

一行で書くことができました

まとめ

上記の例を見ればわかる通り、うるう年の計算を自前でしてはいけません

退屈なことはPythonに任せましょう。