Appendix C. Leap Years (閏年)
この付録では、閏年の計算ルールと実装について詳しく説明します。
閏年のルール
グレゴリオ暦の閏年ルールは、平均年長を地球の太陽周回の実際の周期(約365.2422日)に近づけるように設計されています。
3つのルール
閏年は次の条件のいずれかを満たす必要があります:
- 4で割り切れるが100で割り切れない年は閏年
- 400で割り切れる年は閏年
擬似コード:
if (year % 400 == 0) then
return LEAP_YEAR
else if (year % 100 == 0) then
return NOT_LEAP_YEAR
else if (year % 4 == 0) then
return LEAP_YEAR
else
return NOT_LEAP_YEAR
実装例
Python
def is_leap_year(year):
"""閏年かどうかを判定"""
return (year % 400 == 0) or (year % 4 == 0 and year % 100 != 0)
# またはPython calendarモジュールを使用
import calendar
print(calendar.isleap(2000)) # True
歴史的閏年の例
最近の閏年(21世紀)
2000: 閏年 ✅ (400で割り切れる)
2004: 閏年 ✅ (4で割り切れる、100では割り切れない)
2008: 閏年 ✅
2012: 閏年 ✅
2016: 閏年 ✅
2020: 閏年 ✅
2024: 閏年 ✅
世紀年(特殊ケース)
1600: 閏年 ✅ (400で割り切れる)
1700: 平年 ❌ (100で割り切れるが400では割り切れない)
1800: 平年 ❌
1900: 平年 ❌
2000: 閏年 ✅ (400で割り切れる)
2100: 平年 ❌
なぜ閏年が必要か?
地球の太陽周回の実際の周期は約365.2422日で、正確に365日ではありません。
閏年がない場合の影響:
年間誤差: 0.2422日 ≈ 5時間48分46秒
4年後: 約1日
100年後: 約24日
季節が徐々にずれていきます!
グレゴリオ暦の精度:
400年間の閏年数: 97回
平均年長: 365.2425日
誤差: 0.0003日/年
1日の誤差が蓄積するまで約3,333年
重要ポイント: 閏年ルールの正しい実装は、RFC 3339準拠に不可欠です。