SQL 标准规定,“在‘日期时间字面量’的定义中,‘日期时间值’受格里高利历自然日期和时间规则的约束”。 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 年发明了该历法。中华人民共和国出于民事目的使用格里高利历。中国农历用于确定节日。
如果您在本文档中发现任何不正确之处、与您对特定功能的实际体验不符或需要进一步澄清的内容,请使用此表单报告文档问题。