Nor*_*och 7 java time calendar date java.util.calendar
Calendar班里有一个常数叫做:UNDECIMBER.它描述了第13个月.
这个常数有用吗?在维基百科中,它写的是农历.但是这种日历没有实施.
是否存在第14个月的任何解决方案(Duodecimber)?
我在网上找不到这么多,我想更多地了解这个话题.
小智 5
如前所述,一些月球(和其他古代)日历有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);
}
Run Code Online (Sandbox Code Playgroud)
输出是:
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
Run Code Online (Sandbox Code Playgroud)
请注意,这一年在第13 个月之后发生了变化.
该ThreeTen额外的项目也有一个实现了埃塞俄比亚历,其中有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());
}
Run Code Online (Sandbox Code Playgroud)
输出:
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
Run Code Online (Sandbox Code Playgroud)
您可以注意到,第14 个月后年份发生了变化.范围是1 - 13/14因为几年可以有13或14个月,这取决于它是否是闰年.
| 归档时间: |
|
| 查看次数: |
923 次 |
| 最近记录: |