他記事(日付→西暦0年からの総日数や総時間数への変換)にて西暦0年からの日数計算を取り上げた際,暦に関するご指摘をうけたため本記事を作成.
簡単にまとめると...
- Julian暦(旧暦)・・・400年間に100回の閏年
- Gregorian暦(新暦)・・・400年間に97回の閏年.ルールは下記のとおり.
- 4n年は閏年
- 例外1:100n年は平年
- 例外2:400n年は閏年
- 改暦(主に10日ほどの太陽暦ずれ修正)時期やルールは地域によって異なる.
python(および自然科学系数値計算業界?)では,Gregorian暦を時間軸全域に反映させた理想的な暦(先発グレゴリオ暦)を仮定する.(datetimeモジュールに関する公式ドキュメントより引用).
date オブジェクトは日付 (年、月、および日) を表します。日付は理想的なカレンダー、すなわち現在のグレゴリオ暦を過去と未来の両方向に無限に延長したもので表されます。 1 年の 1 月 1 日は日番号 1, 1 年 1 月 2 日は日番号 2,となっていきます。この暦法は、全ての計算における基本カレンダーである、 Dershowitz と Reingold の書籍 Calendrical Calculations における先発グレゴリオ暦 (proleptic Gregorian) の定義に一致します。
試しに閏年の確認
ystart=1
yend=2018
for y in range(ystart,yend):
t1 = datetime.datetime(y,1,1,0,0)
t2 = datetime.datetime(y+1,1,1,0,0)
if (t2-t1).days != 365:
print (t2-t1).days
ylist.append(y)
結果(ylist)は以下の通り.
[4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48,
52, 56, 60, 64, 68, 72, 76, 80, 84, 88, 92, 96, 104,
108, 112, 116, 120, 124, 128, 132, 136, 140, 144, 148,
152, 156, 160, 164, 168, 172, 176, 180, 184, 188, 192, 196, 204,
208, 212, 216, 220, 224, 228, 232, 236, 240, 244, 248,
252, 256, 260, 264, 268, 272, 276, 280, 284, 288, 292, 296, 304,
308, 312, 316, 320, 324, 328, 332, 336, 340, 344, 348,
352, 356, 360, 364, 368, 372, 376, 380, 384, 388, 392, 396, 400, 404,
408, 412, 416, 420, 424, 428, 432, 436, 440, 444, 448,
452, 456, 460, 464, 468, 472, 476, 480, 484, 488, 492, 496, 504,
508, 512, 516, 520, 524, 528, 532, 536, 540, 544, 548,
552, 556, 560, 564, 568, 572, 576, 580, 584, 588, 592, 596, 604,
608, 612, 616, 620, 624, 628, 632, 636, 640, 644, 648,
652, 656, 660, 664, 668, 672, 676, 680, 684, 688, 692, 696, 704,
708, 712, 716, 720, 724, 728, 732, 736, 740, 744, 748,
752, 756, 760, 764, 768, 772, 776, 780, 784, 788, 792, 796, 800, 804,
808, 812, 816, 820, 824, 828, 832, 836, 840, 844, 848,
852, 856, 860, 864, 868, 872, 876, 880, 884, 888, 892, 896, 904,
: : :
1852, 1856, 1860, 1864, 1868, 1872, 1876, 1880, 1884, 1888, 1892, 1896, 1904,
1908, 1912, 1916, 1920, 1924, 1928, 1932, 1936, 1940, 1944, 1948,
1952, 1956, 1960, 1964, 1968, 1972, 1976, 1980, 1984, 1988, 1992, 1996, 2000, 2004,
2008, 2012, 2016]
ということで,Gregorian暦のルールが西暦元年から適用されていることを確認できた.