2 回答

TA貢獻1111條經驗 獲得超0個贊
LocalDate
正在按照國際標準 (ISO 8601) 做記錄在案的事情。這是否“正確”是一個完全不同的問題。
該LocalDate
Javadoc中本身就包含這個警告:
它相當于預兆公歷系統,其中今天的閏年規則適用于所有時間。對于當今編寫的大多數應用程序,ISO-8601 規則完全適用。但是,任何使用歷史日期并要求它們準確的應用程序都會發現 ISO-8601 方法不合適。
維基百科有更多關于公歷的信息。除其他外,它說:
在數學上,為了便于計算負 (BC) 年和正 (AD) 年之間的年數,將更早的年份表示為負數會更方便。這是天文年編號和國際標準日期系統 ISO 8601 中使用的約定。在這些系統中,0 年是閏年。
請原諒我,因為這一切,我會離題到一些歷史背景。
西方歷法中的年份表面上是從耶穌基督的誕生開始計算的,但這樣做的想法始于 6 世紀,而我們目前的日歷是基于 16 世紀的計算。由于羅馬數字既不代表零也不代表負數,因此年份要么被計算為“耶穌之后”(AD,表示anno domini),要么“耶穌之前”(BC,表示“基督之前”)。因此,傳統上,公元前 1 年之后是公元 1 年,中間沒有零年。
然而,在第一世紀,沒有人這樣計算年數。相比之下,路加福音將耶穌開始傳道的那一年描述為
凱撒提比略十五年,本丟彼拉多為猶地亞的總督,希律為加利利的分封王,他的兄弟腓力分封為伊圖雷亞和特拉科尼蒂斯地區的分封王,呂薩尼亞為亞比林的分封王,
表面上這應該是公元 30 年,因為路加描述耶穌當時“大約三十歲”。但現代歷史學家普遍認為,公元 525 年提出anno domini系統的Dionysius Exiguus錯了,因此年數至少相差一兩年。(確切日期仍然有些爭議;如果您想了解更多細節,請參閱維基百科。)
但現在修復已經太晚了;即使是從儒略歷到格里高利歷的過渡,相差不到兩周,也遇到了廣泛的政治阻力,因為這種轉變在整個歐洲發生了幾個世紀——你可以想象年份編號的變化是多么具有破壞性將是現在!
那么這段歷史與今天的軟件有什么關系呢?不幸的是,由于歷史上計算和記錄日期的方式多種多樣,您要么需要在時間前后移動時以一致的方式放棄日歷,要么必須放棄計算出的日期與真實的人當時會使用的日期有任何對應關系。分歧發生的速度比你想象的要快:不到 100 年前,許多歐洲國家仍在使用儒略歷,與歐洲其他國家相差近兩周!
可以理解的是,LocalDate
洗掉這個爛攤子,只按照我們今天使用的方式來實現日歷。重申 Javadoc 所說的:“對于今天編寫的大多數應用程序,ISO-8601 規則完全合適。但是,任何利用歷史日期并要求它們準確的應用程序都會發現 ISO-8601 方法不合適?!?/strong>
添加回答
舉報