亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java中將time4j轉換的中文日期格式化為公歷

Java中將time4j轉換的中文日期格式化為公歷

藍山帝景 2023-09-06 15:58:02
我正在 Java 中開發一個項目,我需要相互更改不同類型的日期,例如(公歷到中文,反之亦然,公歷到回歷,反之亦然)。我嘗試使用Time4j,它具有將不同類型的日期相互轉換的功能,但不幸的是,即使在嘗試閱讀其文檔后,我也不明白如何使用該庫?,F在我正在嘗試將公歷日期轉換為中國日期,但當我使用它返回循環年份時,我無法獲得中國日期的正常年份,但我需要像 2019 年這樣的正常年份。object.getYear()這是我的代碼:import net.time4j.PlainDate;import net.time4j.calendar.ChineseCalendar;public class DateConverter {static PlainDate gregorian = PlainDate.nowInSystemTime();static ChineseCalendar obj = gregorian.transform(ChineseCalendar.axis());public static void main(String[] args) {    String result = obj.getMonth() + "/" + obj.getDayOfMonth() + "/" + obj.getYear() ;    System.out.println(result);         // 8/30/ji-hai(36)    System.out.println(obj);            // chinese[ji-hai(2019)-8-30]}}我需要這種類型的年份ji-hai(2019),它采用默認toString()方法,當我使用 object.getYear()方法時它返回 ji-hai(36)?,F在如何將返回值從ji-hai(36)更改為ji-hai(2019)。另外,如果我想從用戶那里接收公歷日期,我應該如何準備此轉換?我可以將其作為字符串文本接收并將其轉換為公歷日期然后使用它嗎?有可能嗎?另外,如果您知道一個很好的資源,可以通過示例解釋 Time4j 的類和方法的用法,請與我分享。謝謝。
查看完整描述

1 回答

?
揚帆大魚

TA貢獻1799條經驗 獲得超9個贊

簡短的解決方案:

我建議使用能夠處理中國日歷的專用格式引擎,而不是嘗試依賴toString()諸如此類的各種類型的方法。CyclicYearTime4J 有自己的基于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)

圖案與中國年:

我使用了模式“d/M/U(r)”。中國歷法的“正?!蹦攴菔怯?CLDR 圖案符號“U”表示的循環年。循環年在 60 年后重復,開始新的循環。年份的任何其他定義顯然都是不尋常的。這可能會讓西方用戶感到驚訝,因為他們經常期望以向前的方式計算任何類型的預兆年份。但是,Time4J 還支持其他兩種類型的年份。其中一個是現在僅具有歷史意義的時代年份。另一種類型的年份是相關的公歷年份(使用模式符號“r”)。其主要目的只是為了使循環年份明確。因此,許多人喜歡將中國年份構造為循環年份和相關公歷年份的組合,形式如下:


U(r) or r(U)

甚至可以確定十二年后重復出現的十二生肖。假設您有一個中國日歷對象,您可以通過以下方式確定十二生肖:


? ? String zodiac = obj.getYear().getZodiac(Locale.ENGLISH);

? ? System.out.println("Year of " + zodiac); // Year of Pig

反向方式(解析并轉換為公歷):

只需使用上面定義的格式化程序,然后解析:


? ? PlainDate gregorian = f.parse("1/9/ji-hai(2019)").transform(PlainDate.axis());

? ? System.out.println(gregorian); // output: 2019-09-29

關于轉錄:

我使用根區域設置來構建格式化程序。它以簡單的拉丁字母生成循環年份,沒有任何變音符號。如果您可能想使用官方拼音轉錄,您可以應用英語區域設置。循環年份將顯示為“jǐ-hài”。中文(韓語和日語也使用相同的腳本)、越南語和俄語支持使用其他文字的特殊轉錄。


Time4J 的 API 文檔可以在網上找到。該文檔已經包含格式化和解析中國日歷的示例。但我歡迎任何進一步的貢獻或改進它的具體建議。


查看完整回答
反對 回復 2023-09-06
  • 1 回答
  • 0 關注
  • 175 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號