Calendar
类中有一个常量叫做UNDECIMBER
,它描述了第13个月。
这个常量有什么有用的目的吗?在维基百科上写道,它是为了农历日历。但是没有实现这样的日历。
是否存在任何解决方案来表示第14个月(Duodecimber)?
我在网上没有找到太多信息,我想更多地了解这个话题。
Calendar
类中有一个常量叫做UNDECIMBER
,它描述了第13个月。
这个常量有什么有用的目的吗?在维基百科上写道,它是为了农历日历。但是没有实现这样的日历。
是否存在任何解决方案来表示第14个月(Duodecimber)?
我在网上没有找到太多信息,我想更多地了解这个话题。
java.util.Calendar
,但在Java 8的新API中有一些。随着新的java.time API的引入,也创建了ThreeTen Extra项目,其中包含此类的实现。org.threeten.extra.chrono.CopticChronology
,它扩展了本地的java.time.chrono.Chronology
。我只是做了一个示例代码来创建此日历中的日期并循环遍历其月份:// Coptic calendar
CopticChronology cal = CopticChronology.INSTANCE;
// range for month of year (from 1 to 13)
System.out.println("month range: " + cal.range(ChronoField.MONTH_OF_YEAR)); // 1 - 13
// getting a date in Coptic calendar and loop through the months
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("dd/MM/yyyy");
// September 11th is equivalent to 01/01 in Coptic calendar
CopticDate d = cal.date(LocalDate.of(2017, 9, 11));
for (int i = 0; i < 14; i++) {
System.out.println(fmt.format(d));
d = d.plus(1, ChronoUnit.MONTHS);
}
输出结果为:
month range: 1 - 13
01/01/1734
01/02/1734
01/03/1734
01/04/1734
01/05/1734
01/06/1734
01/07/1734
01/08/1734
01/09/1734
01/10/1734
01/11/1734
01/12/1734
01/13/1734
01/01/1735
ThreeTen Extra 项目也有一个实现, 用于埃塞俄比亚日历, 它也有 13 个月。
PaxChronology
类实现了Pax Calendar:这是一个提出的改革日历系统,但据我所知目前并未使用。例子:
PaxChronology paxCal = PaxChronology.INSTANCE;
System.out.println("month range: " + paxCal.range(ChronoField.MONTH_OF_YEAR));
PaxDate pd = paxCal.date(1930, 1, 1);
for (int i = 0; i < 15; i++) {
// fmt is the same DateTimeFormatter from previous example
System.out.println(fmt.format(pd));
// adjusting for first day of next month - using TemporalAdjuster because
// adding 1 ChronoUnit.MONTHS throws an exception for 14th month (not sure why)
pd = pd.plus(30, ChronoUnit.DAYS).with(TemporalAdjusters.firstDayOfMonth());
}
输出:
month range: 1 - 13/14
01/01/1930
01/02/1930
01/03/1930
01/04/1930
01/05/1930
01/06/1930
01/07/1930
01/08/1930
01/09/1930
01/10/1930
01/11/1930
01/12/1930
01/13/1930
01/14/1930
01/01/1931
1-13/14
,因为年份可以有13或14个月,这取决于它是否是闰年。UNDECIMBER
,但我的理解是OP也问到了实现13个月历法的问题。我也纠正了我的陈述,非常感谢! - user7605325Calendar.UNDECIMBER
是日历类中的一个额外常量,通常在广泛使用的格里高利历中不会使用,但某些农历日历会使用第13个月。这就是此字段的目的。https://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html#UNDECIMBER
此处有维基百科文章:
https://en.wikipedia.org/wiki/Undecimber
维基上还提到了一个第14个月——Duodecimber。不幸的是,Java目前还不支持。
UNDECIMBER
。据我所知,ICU4J使用非常类似的常量来支持一些拥有13个月份的日历(如中国、希伯来、科普特和埃塞俄比亚),但ICU4J类是在另一个包中定义的。 - Meno Hochschild