Calendar.UNDECIMBER做什么?

Calendar类中有一个常量,名为: UNDECIMBER 。 它描述了第13个月。

这个常数有用吗? 在维基百科中,它写的是农历。 但是这种日历没有实施。

是否存在第14个月的任何解决方案(Duodecimber)?

我没有在网上找到这么多,我想了解更多有关这个主题的信息。

如前所述,一些月球(和其他古代)日历有13个月。 一个例子是科普特日历 。

虽然没有实现13个月的日历扩展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 

请注意,这一年在第13 月之后发生了变化。


ThreeTen Extra项目也有埃塞俄比亚日历 的实施 ,也有13个月。


而且,作为一个14个月的日历的例子,有PaxChronology类 ,它实现了Pax日历 :一个拟议的改革日历系统,但据我所知,目前尚未使用。

引用维基百科:

共同年份分为13个月,每个28天,其名称与公历相同,只是在11月至12月期间发生一个名为哥伦布的月份。 每周,每月和每年的第一天是星期天。

在闰年,将在哥伦布之后插入一个为期一周的称为Pax的月份。

根据javadoc :

闰年发生在每年,其最后两位数可以被6整除,是99,或者是00,年份不能被400整除。

例:

 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 

您可以注意到,第14 月后年份发生了变化。 范围是1 - 13/14因为几年可以有13或14个月,这取决于它是否是闰年。

Calendar.UNDECIMBER是Calendar类中的一个额外常量,通常不会在广泛使用的公历中使用,但某些月球日历使用的是第13个月。 这就是这个领域的目的。

请参阅下面的Java文档:

https://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html#UNDECIMBER

维基百科的文章:

https://en.wikipedia.org/wiki/Undecimber

还提到了第14个月 – 维基中的Duodecimber 。 不幸的是,Java还没有(还)支持它。


希望这可以帮助!