B.7. 儒略日期

儒略日期系统是一种计算天数的方法。它虽然在命名上很相似,但是它和儒略历法无关。儒略日期系统是法国学者 Joseph Justus Scaliger(1540–1609)(可能是取自其父亲的名字,即意大利学者 Julius Caesar Scaliger(1484–1558)发明的。

在儒略日期系统中,每天都有一个序数,从 JD 0 开始(有时被叫做那个儒略日期)。 JD 0 在儒略历法中对应公元前 4713 年 1 月 1 日,或者在格里高利历中对应公元前 4714 年 12 月 24 日。儒略日期计数经常被天文学家用来标注夜间观测,并且因此一个日期就是从一个正午 UTC 到下一个正午 UTC,而不是从午夜到另一个午夜:JD 0 设计的 24 小时是从公元前 4714 年 12 月 24 日的正午 UTC 到公元前 4714 年 12 月 25 日的正午 UTC。

尽管PostgreSQL在输入输出日期时支持儒略日期符号(并且也用在一些内部的日期时间计算上使用儒略日期),它不遵守从正午到正午。PostgreSQL把儒略日期当作是从当地午夜到当地午夜,如同一个普通日期。

然而,这个定义确实提供了一种在需要时获得天文定义的方法:在时区UTC+12里运算。例如,

=> SELECT extract(julian from '2021-06-23 7:00:00-04'::timestamptz at time zone 'UTC+12');
           extract
------------------------------
 2459388.95833333333333333333
(1 row)
=> SELECT extract(julian from '2021-06-23 8:00:00-04'::timestamptz at time zone 'UTC+12');
               extract
--------------------------------------
 2459389.0000000000000000000000000000
(1 row)
=> SELECT extract(julian from date '2021-06-23');
 extract
---------
 2459389
(1 row)