pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
儒略历由 Julius Caesar 于公元前 45 年引入。在 1582 年各国开始改用格里高利历之前,它在西方世界一直被广泛使用。在儒略历中,回归年近似为 365 1/4 天 = 365.25 天。这会在大约 128 年里累计 1 天的误差。
不断累积的历法误差促使教皇格里高利十三世按照特伦托会议的指示改革历法。在格里高利历中,回归年近似为 365 + 97 / 400 天 = 365.2425 天。因此,大约要经过 3300 年,回归年与格里高利历之间才会累积出 1 天的偏差。
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
SQL 标准指出,“在‘日期时间字面量’的定义中, ‘日期时间值’受格里高利历中日期和时间自然规则的 约束”。1582-10-05 到 1582-10-14 之间的日期,虽然在某些 国家因教皇敕令而被删除,但它们符合“自然规则”,因此 是有效日期。PostgreSQL 遵循 SQL 标准的做法, 完全按照格里高利历计算日期,即便对于该历法尚未使用之前的 年份也是如此。
世界上不同地区发展出了不同的历法,其中许多都早于格里高利体系。 例如,中国历法的起源可以追溯到公元前 14 世纪。传说黄帝在公元前 2637 年发明了这种历法。 中华人民共和国在民用方面使用格里高利历。中国历法则用于确定节日。
“儒略日”与“儒略历”并无关系。儒略日系统 由法国学者 Joseph Justus Scaliger(1540-1609)发明,其名称大概 取自他的父亲、意大利学者 Julius Caesar Scaliger(1484-1558)。 在儒略日系统中,每一天都有一个连续编号,从 JD 0 开始(有时称为 起始儒略日)。JD 0 对应儒略历公元前 4713 年 1 月 1 日, 或格里高利历公元前 4714 年 11 月 24 日。儒略日计数最常用于天文学家 标记夜间观测,因此一天从 UTC 正午开始,到下一个 UTC 正午结束, 而不是从午夜到午夜:JD 0 表示从 UTC 公元前 4713 年 1 月 1 日正午 到 UTC 公元前 4713 年 1 月 2 日正午的 24 小时。
虽然 PostgreSQL 支持在日期输入和输出中使用儒略日 记法(并且也会在某些内部日期/时间计算中使用儒略日),但它并不 遵循日期从正午算到正午这一约定。PostgreSQL 将 儒略日视为从午夜到午夜。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。