標準SQLでは、「「日付時刻リテラル」定義の中で、「日付時刻の値」はグレゴリオ暦に従った日付と時間の自然法則に則る」と明記されています。 PostgreSQLは標準SQLの指針に従い、グレゴリオ暦が使われる以前の年に対してもグレゴリオ暦で日付を数えます。 この規則は先発グレゴリオ暦として知られています。
ユリウス暦は、紀元前45年にユリウス・カエサル(Julius Caesar)によって広められたものです。 西欧でグレゴリオ暦への移行が開始された1582年まで一般的に使用されていました。 ユリウス暦では、太陽年は365日+1/4日=365.25日と概算されます。 この暦では、128年で約1日のずれが生じます。
ローマ教皇グレゴリウス13世(Gregory XIII)はトレントの公会議(Council of Trent)の勧告に従って累積していた暦のずれを修正しました。 グレゴリオ暦では、太陽年は365+97/400日=365.2425日と近似されます。 したがって、グレゴリオ暦で太陽年が1日ずれるにはおよそ3,300年を要します。
365+97/400という近似は、下記の規則に従って400年間に97回のうるう年を設けることによって得られています。
4で割り切れる年を、うるう年にする。 |
ただし、100で割り切れる年は、うるう年にしない。 |
ただし、400で割り切れる年は、結局うるう年とする。 |
したがって、1700、1800、1900、2100、2200はうるう年ではありませんが、1600、2000、2400はうるう年です。 それに比べ、古いユリウス暦では4で割り切れる年のみがうるう年でした。
1582年2月の教皇勅書は、1582年の10月から10日間除外することを命じ、したがって10月4日の翌日を10月15日としました。
この慣行はイタリア、ポーランド、ポルトガル、スペインで遵守されました。
他のカトリックの国々もすぐ後に追従しましたが、プロテスタントの国々は変更を嫌がり、ギリシャ正教を信奉する国々は20世紀の初めまで変更を行いませんでした。
1752年に大英帝国とその自治領(現在のアメリカ合衆国を含む)でもその改革は行われました。
したがって、1752年9月2日の次は1752年9月14日となっています。
このような理由から、Unixシステムでcal
プログラムを実行すると、下記のような結果になります。
$ cal 9 1752
September 1752
S M Tu W Th F S
1 2 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
しかし、当然、この暦は大英帝国とその自治領でのみ有効なものであり、他の場所ではそうではありません。 様々な場所で様々な時代に使われていた実際の暦を追いかけることは難しく、また、混乱することになるでしょうから、PostgreSQLは追いかけることはせず、この方法が歴史的に正確でなくても日付すべてでグレゴリオ暦の規則に従います。
グレゴリオ暦が開発されるより前から、様々な暦が世界の多くの地域で開発されました。 例えば、中国暦のルーツは紀元前14世紀まで遡ることができますし、伝説では、黄帝が紀元前2637年にこの暦を発明したとされています。 中華人民共和国では、公的な目的ではグレゴリオ暦を使用していますが、祝祭日の決定には中国暦を使用します。