SQL 标准指出 “在 ‘datetime 字面量’ 的定义中,‘datetime 值’ 受格里高利历的自然规则约束,即使对于该日历使用之前的那几年也是如此”. PostgreSQL 遵循 SQL 标准的指导,即使在该日历使用之前的那几年,也只在格里高利历中计算日期。此规则称为前格里高利历。
儒略历由凯撒大帝于公元前 45 年引入。在西方世界中,它一直普遍使用,直到 1582 年,各国开始改用格里高利历。在儒略历中,回归年近似为 365 1/4 天 = 365.25 天。这导致大约 128 年出现 1 天的误差。
累积的日历误差促使教皇格里高利十三世根据特伦特会议的指示改革日历。在格里高利历中,回归年近似为 365 + 97 / 400 天 = 365.2425 天。因此,回归年大约需要 3300 年才能相对于格里高利历移动一天。
近似值 365+97/400 是通过每 400 年有 97 个闰年实现的,使用以下规则
每 4 年可以整除的年份都是闰年。 |
但是,每 100 年可以整除的年份不是闰年。 |
但是,每 400 年可以整除的年份毕竟是闰年。 |
因此,1700 年、1800 年、1900 年、2100 年和 2200 年不是闰年。但 1600 年、2000 年和 2400 年是闰年。相比之下,在较早的儒略历中,每 4 年可以整除的年份都是闰年。
1582 年 2 月的教皇诏书规定,应从 1582 年 10 月中删除 10 天,以便 10 月 15 日紧随 10 月 4 日之后。这在意大利、波兰、葡萄牙和西班牙得到遵守。其他天主教国家紧随其后,但新教国家不愿改变,希腊东正教国家直到 20 世纪初才改变。英国及其自治领(包括现在的美国)在 1752 年遵守了改革。因此,1752 年 9 月 2 日之后是 1752 年 9 月 14 日。这就是具有 cal
程序的 Unix 系统生成以下内容的原因
$ 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 年发明了该日历。中华人民共和国出于民事目的使用格里高利历。中国历法用于确定节日。