PostgreSQL 單位的歷史

2021-09-09 17:46 更新

SQL 標(biāo)準(zhǔn)說到在一個日期時間文字的定義中,日期時間值根據(jù)格里高利歷被日期和時間的自然規(guī)則所約束。PostgreSQL遵循 SQL 標(biāo)準(zhǔn),導(dǎo)致只在格里高利歷內(nèi)計算日期,即使對于該歷法開始使用之前的日期也是如此。這個規(guī)則被稱作外推格里高利歷。

儒略日期是由 Julius Caesar 在公元前 45 年引入的。直到 1582 年開始轉(zhuǎn)為使用公歷之前,西方世界一直使用儒略日期。 在儒略日期中,一回歸年近似等于 365 又 1/4 天 = 365.25 天。它大約在128年中會出現(xiàn) 1 天的誤差。

不斷積累的歷法錯誤促使教皇格里高利十三世按照特倫托會議的指示改革了歷法。在格里高利歷中,一回歸年近似為 365 + 97/400 天 = 365.2425 天。因此對于格里高利歷,大約要 3300 年一回歸年才會積累一天的誤差。

近似值 365+97/400 是通過利用下面的規(guī)則,并規(guī)定每 400 年有 97 個閏年實現(xiàn)的:

每個可被 4 整除的年是一個閏年。
不過,可被 100 整除的年不是閏年。
但是,可以被 400 整除的年還是閏年。

因此,1700、1800、1900、2100 和 2200 都不是閏年。而 1600、2000、2400 是閏年。相比而言,舊式的儒略歷法里面只有能被4整除的年是閏年。 相反,在舊的儒略歷法中所有能被 4 整除的年都是閏年。

羅馬教皇在 1582 年 2 月宣布從 1582 年的 10 月中減除 10 天,這樣 10 月 15 日就緊跟在 10 月 4 日的后面。意大利、波蘭、葡萄牙和西班牙遵守了這個要求。其他天主教的國家也緊跟它們的步伐。但新教國家拒絕改變,而希臘東正教國家卻一直拖延到 20 世紀(jì)開始時才逐漸遵守這個規(guī)定。 大英帝國及其殖民地(包含今天的美國)在 1752 年開始遵守這項改革。因此 1752 年 9 月 2 日之后緊跟著 14 日。 這就是為什么 Unix 系統(tǒng)上的cal程序 會產(chǎn)生如下輸出的原因:

$ 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并沒有做這種嘗試,而是對所有日期遵循格里高利歷規(guī)則,即使該方法在歷史上是不精確的。

在世界的多個地方,發(fā)展了不同的歷法,很多比格里高利系統(tǒng)還早。 例如,中國歷法的開端可以追溯到公元前 14 世紀(jì)。傳說黃帝在公元前 2637 年就發(fā)明了這個歷法。 中華人民共和國把格里高利歷作為民用。中國歷法則被用于決定節(jié)日/節(jié)氣。

儒略日期不是另一種類型的歷法,雖然在命名上很相似,但是它和儒略歷法無關(guān)。儒略日期系統(tǒng)是法國學(xué)者 Joseph Justus Scaliger(1540–1609)(可能是取自其父親的名字,即意大利學(xué)者 Julius Caesar Scaliger(1484–1558)發(fā)明的。 在儒略日期系統(tǒng)中,每天都有一個序數(shù),從 JD 0 開始(有時被叫做那個儒略日期)。 JD 0 在儒略歷法中對應(yīng)公元前 4713 年 1 月 1 日,或者在格里高利歷中對應(yīng)公元前 4714 年 12 月 24 日。儒略日期計數(shù)經(jīng)常被天文學(xué)家用來標(biāo)注夜間觀測,并且因此一個日期就是從一個正午 UTC 到下一個正午 UTC,而不是從午夜到另一個午夜:JD 0 設(shè)計的 24 小時是從公元前 4714 年 12 月 24 日的正午 UTC 到公元前 4714 年 12 月 25 日的正午 UTC。

盡管PostgreSQL在輸入輸出日期時支持儒略日期符號(并且也用在一些內(nèi)部的日期時間計算上使用儒略日期),它不遵守從正午到正午。PostgreSQL把儒略日期當(dāng)作是從午夜到午夜。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號