在 Java 中将中文日期按 time4j 格式化为公历
Formatting Chinese converted date by time4j to Gregorian in Java
我正在 Java 进行一个项目,我需要将不同类型的日期相互更改,例如(公历到中文,反之亦然,公历到回历,反之亦然)。我尝试使用 Time4j,它具有将不同类型的日期相互转换的功能,但不幸的是,即使在我尝试阅读其文档后,我也不明白如何使用该库.
现在我正在尝试将公历日期转换为中国日期,但是当我使用 object.getYear()
时,我无法在中国日期中获得 正常年份 returns 循环年,但我需要像 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()
方法时它 returns ji-hai(36).
现在如何将我的 return 值从 ji-hai(36) 更改为 ji-hai(2019).另外,如果我想从用户那里收到公历日期,我应该如何为这种转换做准备?我可以将它作为字符串文本接收并将其转换为公历日期然后使用吗?有可能吗?
此外,如果您知道一个很好的资源,可以通过示例解释 类 的用法和 Time4j 的方法,请与我分享。
谢谢。
简短的解决方案:
与其尝试依赖 toString()
等各种类型的方法,如 CyclicYear
等,我建议使用能够处理中国日历的专用格式引擎。 Time4J 有自己的格式引擎,基于 class 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)"。农历"normal"年是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 文档 online。该文档已包含格式化和解析中国日历的示例。但我欢迎任何进一步的贡献或改进它的具体建议。
我正在 Java 进行一个项目,我需要将不同类型的日期相互更改,例如(公历到中文,反之亦然,公历到回历,反之亦然)。我尝试使用 Time4j,它具有将不同类型的日期相互转换的功能,但不幸的是,即使在我尝试阅读其文档后,我也不明白如何使用该库.
现在我正在尝试将公历日期转换为中国日期,但是当我使用 object.getYear()
时,我无法在中国日期中获得 正常年份 returns 循环年,但我需要像 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()
方法时它 returns ji-hai(36).
现在如何将我的 return 值从 ji-hai(36) 更改为 ji-hai(2019).另外,如果我想从用户那里收到公历日期,我应该如何为这种转换做准备?我可以将它作为字符串文本接收并将其转换为公历日期然后使用吗?有可能吗?
此外,如果您知道一个很好的资源,可以通过示例解释 类 的用法和 Time4j 的方法,请与我分享。
谢谢。
简短的解决方案:
与其尝试依赖 toString()
等各种类型的方法,如 CyclicYear
等,我建议使用能够处理中国日历的专用格式引擎。 Time4J 有自己的格式引擎,基于 class 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)"。农历"normal"年是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 文档 online。该文档已包含格式化和解析中国日历的示例。但我欢迎任何进一步的贡献或改进它的具体建议。