Module java.base
Package java.time.chrono
package java.time.chrono
除了默认的ISO日历系统之外的通用API。
主要API基于ISO-8601中定义的日历系统。然而,还有其他日历系统,该包为它们提供了基本支持。备用日历在java.time.chrono
包中提供。
日历系统由Chronology
接口定义,而日历系统中的日期由ChronoLocalDate
接口定义。
建议应用程序尽可能使用主要API,包括用于从持久数据存储(如数据库)读取和写入的代码,以及用于在网络上传输日期和时间。然后在用户界面级别使用“chrono”类来处理本地化的输入/输出。请参阅ChronoLocalDate
以获取有关这些问题的完整讨论。
在应用程序中使用非ISO日历系统会引入显着的额外复杂性。在使用“chrono”接口之前,请确保已阅读ChronoLocalDate
中的警告和建议。
支持的日历系统包括:
示例
此示例列出了所有可用日历的今天日期。
// 枚举可用日历列表并打印每个日历的今天日期。 Set<Chronology> chronos = Chronology.getAvailableChronologies(); for (Chronology chrono : chronos) { ChronoLocalDate date = chrono.dateNow(); System.out.printf(" %20s: %s%n", chrono.getId(), date.toString()); }
此示例创建并使用了一个具有指定非ISO日历系统的日期。
// 打印泰国佛历日期 ChronoLocalDate now1 = Chronology.of("ThaiBuddhist").dateNow(); int day = now1.get(ChronoField.DAY_OF_MONTH); int dow = now1.get(ChronoField.DAY_OF_WEEK); int month = now1.get(ChronoField.MONTH_OF_YEAR); int year = now1.get(ChronoField.YEAR); System.out.printf(" 今天是 %s %s %d-%s-%d%n", now1.getChronology().getId(), dow, day, month, year); // 打印泰国佛历日历的今天日期和年底日期。 ChronoLocalDate first = now1 .with(ChronoField.DAY_OF_MONTH, 1) .with(ChronoField.MONTH_OF_YEAR, 1); ChronoLocalDate last = first .plus(1, ChronoUnit.YEARS) .minus(1, ChronoUnit.DAYS); System.out.printf(" %s: 年初日期: %s; 年底日期: %s%n", last.getChronology().getId(), first, last);
此示例创建并使用了一个特定的泰国佛历日历系统的日期。
// 打印泰国佛历日期 ThaiBuddhistDate now1 = ThaiBuddhistDate.now(); int day = now1.get(ChronoField.DAY_OF_MONTH); int dow = now1.get(ChronoField.DAY_OF_WEEK); int month = now1.get(ChronoField.MONTH_OF_YEAR); int year = now1.get(ChronoField.YEAR); System.out.printf(" 今天是 %s %s %d-%s-%d%n", now1.getChronology().getId(), dow, day, month, year); // 打印泰国佛历日历的今天日期和年底日期。 ThaiBuddhistDate first = now1 .with(ChronoField.DAY_OF_MONTH, 1) .with(ChronoField.MONTH_OF_YEAR, 1); ThaiBuddhistDate last = first .plus(1, ChronoUnit.YEARS) .minus(1, ChronoUnit.DAYS); System.out.printf(" %s: 年初日期: %s; 年底日期: %s%n", last.getChronology().getId(), first, last);
包规范
除非另有说明,在此包中的任何类或接口的构造函数或方法中传递空参数将导致抛出NullPointerException
。Javadoc的“@param”定义用于总结空值行为。在每个方法中未明确记录“@throws NullPointerException
”。
所有计算应检查数值溢出并抛出ArithmeticException
或DateTimeException
。
- 自版本:
- 1.8
-
ClassDescription用于组织和标识日期的日历系统的抽象实现。在任意年表中没有时间或时区的日期,用于高级全球化用例。ChronoLocalDateTime<D extends ChronoLocalDate>在任意年表中没有时区的日期时间,用于高级全球化用例。用于组织和标识日期的日历系统。基于日期的时间量,例如在任意年表中的'3年4个月5天',用于高级全球化用例。ChronoZonedDateTime<D extends ChronoLocalDate>在任意年表中带有时区的日期时间,用于高级全球化用例。时间线上的一个时代。伊斯兰历是支持伊斯兰日历的阴历日历。伊斯兰历日历系统中的日期。伊斯兰历日历系统中的时代。ISO日历系统。ISO日历系统中的时代。日本帝国历法系统。日本帝国历法系统中的日期。日本帝国历法系统中的时代。民国历法系统。民国历法系统中的日期。民国历法系统中的时代。泰国佛历日历系统。泰国佛历日历系统中的日期。泰国佛历日历系统中的时代。