SQL 标准指出:“在 ‘datetime 字面量’的定义内, ‘datetime 值’受限于公历的日期和时间自然规则”。 PostgreSQL 遵循 SQL 标准的引领,完全按公历计算日期,即使对于该日历投入使用之前的年份 也是如此。 这条规则被称为 前推公历(proleptic Gregorian calendar)。
儒略历由尤利乌斯·凯撒于公元前 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 年发明了这种历法。 中华人民共和国出于民用目的使用公历。中国历法被用于确定 节日。