1 回答

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超9個(gè)贊
簡(jiǎn)短的解決方案:
我建議使用能夠處理中國(guó)日歷的專用格式引擎,而不是嘗試依賴toString()
諸如此類的各種類型的方法。CyclicYear
Time4J 有自己的基于ChronoFormatter類的格式引擎:
?ChineseCalendar obj = PlainDate.nowInSystemTime().transform(ChineseCalendar.axis());
? ? ChronoFormatter<ChineseCalendar> f =
? ? ? ? ChronoFormatter.ofPattern(
? ? ? ? ? "d/M/U(r)",?
? ? ? ? ? PatternType.CLDR,?
? ? ? ? ? Locale.ROOT,?
? ? ? ? ? ChineseCalendar.axis());
? ? System.out.println(f.print(obj));? ?
? ? // output today: 1/9/ji-hai(2019)
圖案與中國(guó)年:
我使用了模式“d/M/U(r)”。中國(guó)歷法的“正常”年份是由 CLDR 圖案符號(hào)“U”表示的循環(huán)年。循環(huán)年在 60 年后重復(fù),開始新的循環(huán)。年份的任何其他定義顯然都是不尋常的。這可能會(huì)讓西方用戶感到驚訝,因?yàn)樗麄兘?jīng)常期望以向前的方式計(jì)算任何類型的預(yù)兆年份。但是,Time4J 還支持其他兩種類型的年份。其中一個(gè)是現(xiàn)在僅具有歷史意義的時(shí)代年份。另一種類型的年份是相關(guān)的公歷年份(使用模式符號(hào)“r”)。其主要目的只是為了使循環(huán)年份明確。因此,許多人喜歡將中國(guó)年份構(gòu)造為循環(huán)年份和相關(guān)公歷年份的組合,形式如下:
U(r) or r(U)
甚至可以確定十二年后重復(fù)出現(xiàn)的十二生肖。假設(shè)您有一個(gè)中國(guó)日歷對(duì)象,您可以通過(guò)以下方式確定十二生肖:
? ? String zodiac = obj.getYear().getZodiac(Locale.ENGLISH);
? ? System.out.println("Year of " + zodiac); // Year of Pig
反向方式(解析并轉(zhuǎn)換為公歷):
只需使用上面定義的格式化程序,然后解析:
? ? PlainDate gregorian = f.parse("1/9/ji-hai(2019)").transform(PlainDate.axis());
? ? System.out.println(gregorian); // output: 2019-09-29
關(guān)于轉(zhuǎn)錄:
我使用根區(qū)域設(shè)置來(lái)構(gòu)建格式化程序。它以簡(jiǎn)單的拉丁字母生成循環(huán)年份,沒有任何變音符號(hào)。如果您可能想使用官方拼音轉(zhuǎn)錄,您可以應(yīng)用英語(yǔ)區(qū)域設(shè)置。循環(huán)年份將顯示為“jǐ-hài”。中文(韓語(yǔ)和日語(yǔ)也使用相同的腳本)、越南語(yǔ)和俄語(yǔ)支持使用其他文字的特殊轉(zhuǎn)錄。
Time4J 的 API 文檔可以在網(wǎng)上找到。該文檔已經(jīng)包含格式化和解析中國(guó)日歷的示例。但我歡迎任何進(jìn)一步的貢獻(xiàn)或改進(jìn)它的具體建議。
添加回答
舉報(bào)