在 Java 中格式化中文通过 time4j 将日期转换为公历



我正在用Java做一个项目,我需要将不同类型的日期相互更改,例如(公历到中文,反之亦然,公历到回历,反之亦然(。我尝试使用Time4j,它具有此功能将不同类型的日期相互转换,但不幸的是,即使我尝试阅读其文档,我也不明白如何使用该库。

现在我正在尝试将公历日期转换为中国日期,但是当我使用时,我无法获得中文日期的正常年份object.getYear()它返回循环年份,但我需要像 2019 这样的正常年份。

这是我的代码:

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(。

现在如何将我的返回值从ji-hai(36(更改为ji-hai(2019(。另外,如果我想从用户那里接收公历日期,我应该如何为此转换做好准备?我可以将其作为字符串文本接收并将其转换为公历日期然后使用它吗?可能吗?

另外,如果您知道一个很好的资源,可以解释Time4j的类和方法的用法,请与我分享。

谢谢。

简短的解决方案:

与其尝试依赖CyclicYear等各种类型的toString()方法,我建议使用能够处理中国日历的专用格式引擎。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)

模式和中国年份:

我使用了模式"d/M/U(r("。农历的"正常"年份是由CLDR图案符号"U"表示的循环年。周期性年份在60年后重复,开始一个新的周期。年份的任何其他定义显然是不寻常的。这可能会让西方用户感到惊讶,因为他们经常期望以向前的方式计算任何一种外推年。但是,Time4J还支持另外两种年份。一个是时代之年,现在只具有历史意义。另一种类型的年份是相关的公历年(使用图案符号"r"(。它的主要目的只是使循环年明确。因此,许多人喜欢以这种形式将中国年份构建为循环年和相关公历年的组合:

U(r) or r(U)

甚至可以确定仅在 12 年后重复的十二生肖。假设您有一个中国日历对象,您可以通过以下方式确定十二生肖:

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文档可以在网上找到。该文档已经包含格式化和解析中国日历的示例。但我欢迎对它作出任何进一步的贡献或提出改进它的具体建议。

最新更新