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”。

所有计算应检查数值溢出并抛出ArithmeticExceptionDateTimeException

自版本:
1.8