MySQL では、先発グレゴリオ暦と呼ばれるものが使用されています。
ユリウス暦からグレゴリオ暦に切り替えた国はすべて、切り替え時に少なくとも 10 日間を破棄する必要がありました。 この動作を確認するために、最初にユリウス暦からグレゴリオ暦への切り替えが発生した 1582 年 10 月を考えてください。
月曜日 | 火曜日 | 水曜日 | 木曜日 | 金曜日 | 土曜日 | 日曜日 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
10 月 4 日から 10 月 15 日の間には日付がありません。 この不連続性はカットオーバーと呼ばれます。 カットオーバー前の日付はユリウス暦で、カットオーバー後の日付はグレゴリオ暦です。 カットオーバー中の日付は存在しません。
実際に使用されていなかった日付に適用されるカレンダーは、先発と呼ばれます。 したがって、カットオーバーが発生せず、常にグレゴリオ暦のルールで制御されていると考えられる場合は、先発グレゴリオ暦が使用されています。 これが MySQL で使用されるものであり、標準 SQL でも必須です。 そのため、MySQL DATE
または DATETIME
値として格納されたカットオーバー前の日付は、その違いが補正されるように調整する必要があります。 すべての国で同時にカットオーバーが発生しなかったこと、および発生が遅くなるほど失われる日数も多かったことに気付くことが重要です。 たとえば、イギリスでは 1752 年に発生し、9 月 2 日水曜日の翌日が 9 月 14 日木曜日になりました。 ロシアでは 1918 年までユリウス暦のままでしたが、その過程で 13 日間が失われました。「10 月革命」として知られる有名な事件は、グレゴリオ暦に従うと 11 月に発生しました。