跳至內容

前推格里曆

維基百科,自由的百科全書
(重新導向自前推公历

前推格里曆Proleptic Gregorian Calendar),亦稱前公曆[1] Proceptic 西曆[2]逆推格里曆,是將現行的格里曆(公曆)的置閏規則向前推算,應用於其正式頒布年份1582年之前的日期的曆法表達。這樣做是為了方便歷史年代的連續計算和表達,特別是在歷史學、天文學和計算領域。

根據國際標準化組織 ISO 8601:2004 標準(第3.2.1節),在信息交換的合作夥伴同意的情況下,允許使用前推格里曆來表示1582年之前的日期[3]

歷史背景

[編輯]

格里曆由教宗格里高利十三世在1582年頒布,用以取代儒略曆。儒略曆每4年一閏,平均年長為365.25日,這比實際的回歸年(約365.2422日)長了約11分14秒。這個微小的差異導致自公元325年第一次尼西亞公會議以來,春分日逐漸向更早的日期漂移。格里曆的改革調整了置閏規則(每400年少3個閏日),並一次性刪除了1582年10月中的10天(10月4日之後直接是10月15日),使春分日恢復到3月21日左右。

前推格里曆的概念,便是將格里曆的這些置閏規則應用到1582年之前,猶像格里曆在那時就已經存在並被使用。這為研究和記錄歷史事件提供了一個統一的年代標尺。

應用場景

[編輯]

歷史學

[編輯]

歷史學家在處理1582年之前的日期時,有時會使用前推格里曆來進行年代的標準化轉換,尤其是在需要比較不同地區、不同曆法記錄的事件時[4]。然而,最佳實踐是首先記錄歷史文獻中使用的原始日期(註明所用曆法,如儒略曆「舊式」日期),然後再提供其對應的前推格里曆日期[5]。 例如,美國首任總統喬治·華盛頓的生日,根據當時大英帝國(包括其美洲殖民地)使用的儒略曆以及以3月25日為新年起始日的紀年方式,記錄為1731年2月11日(舊式,O.S.)。[6][7]大英帝國於1752年改用格里曆,並將新年起始日改為1月1日。若將華盛頓的生日按前推格里曆規則轉換,並考慮到新年起始日的調整,則為1732年2月22日。明確註明「舊式」與「新式」(或前推格里曆)對於避免混淆至關重要。

另一個例子是日本的神武天皇即位日。根據日本古籍《日本書紀》中的干支記載「辛酉年春正月庚辰朔」,明治時代的天文學家和歷算家將其比定為前推格里曆公元前660年2月11日,並定為紀元節(後來的建國紀念之日)。[8][9] 此年代和日期的史實性在學術界有廣泛討論,但仍可作為前推格里曆應用的一個實例。

天文學

[編輯]

天文學家在計算古代天象(如日食月食)時,為了獲得一致和精確的時間序列,常常使用儒略日(Julian Day Number)系統。儒略日是一個自公元前4713年1月1日格林威治平午12時起算的連續日數。日期和時間的轉換通常需要明確所依據的曆法。在需要格里曆日期的場合,對於1582年之前的事件,使用前推格里曆的日期是必要的。

計算機與軟件

[編輯]

ISO 8601標準是日期和時間表示的國際標準,它在特定條件下允許使用前推格里曆。許多程式語言和數據庫系統為了簡化日期時間的處理,內部可能採用前推格里曆來表示歷史日期。例如:

  • PostgreSQL 數據庫在處理日期時,對1582年之前的日期採用前推格里曆。[10]
  • MySQL 數據庫同樣支持歷史日期,其日曆系統從公元1年開始就遵循格里曆規則。[11]
  • SQLite 的日期和時間函數也能夠處理1582年之前的日期,其行為兼容前推格里曆。[12]
  • Python 的 `datetime` 模塊,其標準日曆算法也是基於前推格里曆,可以表示從公元1年開始的日期。[13]
  • 微軟公司的編程基礎庫ATL的類 `COleDateTime` 支持從公元100年1月1日開始的日期,其行為模式也符合前推格里曆。[14][15][16][17][18]

在這些系統中,1582年10月沒有日期間斷。

計算方法與規則

[編輯]

前推格里曆的計算規則與標準格里曆完全相同: 1. 年份能被4整除但不能被100整除的是閏年(如2024年)。 2. 年份能被400整除的是閏年(如2000年)。 3. 其他年份為平年。

將此規則向前無限追溯即可得到任何年份的日數和日期。

公元元年及公元前年份

[編輯]

在歷史紀年中,通常沒有「公元0年」。公元1年之前是公元前1年。 然而,在天文學年份編號和ISO 8601標準中,為了方便計算,引入了公元0年,它對應於歷史上的公元前1年。更早的年份則用負數表示(例如,公元前2年對應天文學年份-1年)。 在這種編號系統中:

  • 天文學的 0 年 (對應歷史上的公元前1年) 是閏年 (因為它相當於可以被4整除的年份,且適用格里曆規則)[19]
  • 歷史上的公元前1年 (天文學0年)、公元前5年 (天文學-4年)、公元前9年 (天文學-8年) 等,如果按照格里曆規則判斷,都是閏年。

例如,要判斷歷史上的公元前 年是否為前推格里曆閏年: 1. 若使用天文學年份編號,則年份為 。若 符合格里曆閏年規則,則為閏年。 2. 若直接使用公元前 年,可以判斷 是否符合「能被4整除但非整百年份,或能被400整除的整百年份」這一規律的反推(需注意BC年號越大,年份越早)。更簡便的是將其轉換為對應的天文學年份判斷。

儒略日

[編輯]

在實際計算中,尤其是需要跨越很長時間範圍或在不同曆法間轉換時,天文學家和程式設計師常使用儒略日(Julian Day Number, JDN)作為中間參照。JDN是一個自公元前4713年1月1日世界時12:00起算的連續日數。任何日期都可以轉換為JDN,反之亦然。進行這種轉換時,必須明確指定所用的曆法是儒略曆還是(前推)格里曆。 例如,可以通過Fliegel與 Van Flandern 在1968年提出的算法將格里曆日期(包括前推格里曆日期)轉換為JDN。[20] (請注意:某些從JDN轉換回非常早期的前推格里曆日期的簡化算法可能存在問題,特別是在公元400年之前,因此需要使用經過驗證的完整算法。[21])

另一個概念是Rata Die系統,它將公元1年1月1日(前推格里曆)定義為第1天,並以此計算連續日數。一些編程系統使用此方法。

與儒略曆的差異

[編輯]

由於儒略曆和格里曆的置閏規則不同(儒略曆每4年一閏,格里曆每400年少3閏),隨着時間向前推移,兩者累積的日數差異會逐漸變化。

  • 公元4年公元100年2月28日(儒略曆)期間,前推格里曆比儒略曆 慢2天
  • 從公元100年3月1日(儒略曆)至200年2月28日(儒略曆),前推格里曆比儒略曆 慢1天
  • 從公元200年3月1日(儒略曆)至300年2月28日(儒略曆),兩者日期 相同
  • 此後,每經過一個儒略曆的世紀年但非格里曆閏年的世紀年(如500年、600年、700年、900年、1000年、1100年、1300年、1400年、1500年),前推格里曆會比儒略曆快一天。
  • 到1582年10月格里曆改革前夕,格里曆日期已比儒略曆日期快10天。

下表顯示了在首次正式引入公曆之前,儒略曆和前推公曆日期的區別:

儒略曆範圍 公曆範圍 公曆領先日數
4年3月3日(預期儒略曆的開始)
100年3月1日
4年3月1日
100年2月28日
-2日
100年3月2日
200年2月29日
100年3月1日
200年2月28日
-1日
200年3月1日
300年2月28日
200年3月1日
300年2月28日
0日
300年2月29日
500年2月27日
300年3月1日
500年2月28日
1日
500年2月28日
600年2月26日
500年3月1日
600年2月28日
2日
600年2月27日
700年2月25日
600年3月1日
700年2月28日
3日
700年2月26日
900年2月24日
700年3月1日
900年2月28日
4日
900年2月25日
1000年2月23日
900年3月1日
1000年2月28日
5日
1000年2月24日
1100年2月22日
1000年3月1日
1100年2月28日
6日
1100年2月23日
1300年2月21日
1100年3月1日
1300年2月28日
7日
1300年2月22日
1400年2月20日
1300年3月1日
1400年2月28日
8日
1400年2月21日
1500年2月19日
1400年3月1日
1500年2月28日
9日
1500年2月20日
1582年10月4日
1500年3月1日
1582年10月14日
10日

注意:上表假設儒略閏日為2月29日。然而,歷史上儒略曆的閏日(拉丁語:拉丁語ante diem bis sextum Kalendas Martias)是通過重複2月24日來實現的(稱為「雙崗日」,bissextile day)。[22] 這意味着在儒略曆的閏年中,嚴格來說有兩個2月24日,這會影響2月24日至2月28日之間的日期計數。此外,儒略曆在公元前45年至公元4年之間的置閏並非規律的每四年一閏,存在「閏年錯誤」時期,直到公元4年(或有說公元8年)之後才穩定下來。

使用中的混淆點與注意事項

[編輯]
  • 舊式與新式日期 (Old Style and New Style dates):在格里曆被各國逐漸採用的過渡時期(1582年至20世紀初,如俄國到1918年,土耳其到1927年),同一歷史事件可能因地區不同而有不同的日期記錄。一些國家在改歷的同時,還將新年從3月25日(或其他日期)移至1月1日。這會導致年份和日期都發生變化,如前述喬治·華盛頓的生日例子,其儒略曆日期1731年2月11日不僅月份和日數不同於格里曆的2月22日,年份也因舊式以3月25日為新年起點而記為1731年,但在以1月1日為新年的格里曆中則屬於1732年。
  • 公元0年的問題:如前所述,歷史紀年無公元0年,而天文學和ISO 8601有。使用時需明確是哪種體系。
  • 史料的原始日期:研究歷史時,應首先採用史料中記載的原始日期和曆法,然後根據需要換算為前推格里曆日期,並加以註明。
  • 軟件實現的差異:雖然許多系統聲稱支持前推格里曆,但其對非常早期日期(如公元前)的處理細節,特別是閏年規則和公元0年的處理,可能存在細微差別,需查閱具體文檔。一些簡單的日期計算代碼可能未完全實現格里曆的所有複雜規則(如整百年份的判斷),導致錯誤。

參考文獻

[編輯]
  1. ^ https://learn.microsoft.com/zh-cn/azure/databricks/archive/spark-3.x-migration/dates-timestamps頁面存檔備份,存於互聯網檔案館) 日期和時間戳 - Azure Databricks | Microsoft Learn
  2. ^ https://learn.microsoft.com/zh-tw/azure/databricks/archive/spark-3.x-migration/dates-timestamps頁面存檔備份,存於互聯網檔案館) 日期和時間 - Azure Databricks | Microsoft Learn
  3. ^ ISO 8601:2004(en), Data elements and interchange formats — Information interchange — Representation of dates and times. ISO. 
  4. ^ The proceedings of the Maya hieroglyphic workshop. University of Texas. 1982: 173. 
  5. ^ Spathaky, Mike. Old Style New Style Dates and the Change to the Gregorian Calendar. GENUKI. [27 May 2021]. (原始內容存檔於2014-10-11). Increasingly parish registers, in addition to a new year heading after 24th March showing, for example '1733', had another heading at the end of the following December indicating '1733/4'. This showed where the New Style 1734 started even though the Old Style 1733 continued until 24th March. ... We as historians have no excuse for creating ambiguity and must keep to the notation described above in one of its forms. It is no good writing simply 20th January 1745, for a reader is left wondering whether we have used the Old or the New Style reckoning. The date should either be written 20th January 1745 O.S. (if indeed it was Old Style) or as 20th January 1745/6. The hyphen (1745-6) is best avoided as it can be interpreted as indicating a period of time 
  6. ^ George Washington's Birthday. Library of Congress. 
  7. ^ George Washington's Birthday. National Archives. n.d. [11 May 2016]. (原始內容存檔於2022-04-17). 
  8. ^ 國民學術協會. 國史辭典. 國民學術協會藏版. 1908: 387. 按日本書紀推算、辛酉歳は西洋紀元前六百六十年、春正月庚辰朔は二月十一日に相當す 
  9. ^ 太政官布告第三百四十二号(神武天皇御即位年月ヲ定め紀元節御祭典ヲ行ハシム) (PDF). 日本國立公文書館 (National Archives of Japan): 2. 明治五年十一月十五日 (Meiji 5, 11th month, 15th day - i.e. 1872). 
  10. ^ 8.5. Date/Time Types - Footnotes. PostgreSQL Documentation. 
  11. ^ 11.2.2 The DATE, DATETIME, and TIMESTAMP Types. MySQL Documentation. 
  12. ^ Date And Time Functions. SQLite Documentation. 
  13. ^ datetime — Basic date and time types. Python Software Foundation. 
  14. ^ COleDateTime Class. Microsoft Learn. 
  15. ^ MSDN:COleDateTime Class. [2018-06-26]. (原始內容存檔於2018-06-26). 
  16. ^ https://learn.microsoft.com/en-us/cpp/atl-mfc-shared/reference/coledatetime-class
  17. ^ https://learn.microsoft.com/zh-cn/cpp/atl-mfc-shared/reference/coledatetime-class
  18. ^ https://learn.microsoft.com/zh-tw/cpp/atl-mfc-shared/reference/coledatetime-class
  19. ^ Doggett, L. E. P. Kenneth Seidelmann , 編. Explanatory Supplement to the Astronomical Almanac. Sausalito, California: University Science Books. 1992. ISBN 0-935702-68-7. (原始內容存檔於2012-02-10). 
  20. ^ Fliegel, H. F.; Van Flandern, T. C. A Machine Algorithm for Processing Calendar Dates. Communications of the ACM. 1968, 11 (10): 657. doi:10.1145/364096.364097. 
  21. ^ Jefferys, W. H.; et al. Julian Day Calculations (Gregorian Calendar). 
  22. ^ Richards, E. G. Mapping Time: The Calendar and its History. Oxford University Press. 1998: 59–61, 213–215. ISBN 0-19-286205-7. 

參見

[編輯]