Module java.base
Package java.time.chrono

Class JapaneseChronology

java.lang.Object
java.time.chrono.AbstractChronology
java.time.chrono.JapaneseChronology
所有已实现的接口:
Serializable, Comparable<Chronology>, Chronology

public final class JapaneseChronology extends AbstractChronology implements Serializable
日本帝国历法系统。

此年表定义了日本帝国历法系统的规则。该历法系统主要在日本使用。日本帝国历法系统与ISO历法系统相同,除了基于纪元的年份编号。

日本从明治6年开始使用公历。仅支持明治及以后的年代;不支持明治6年1月1日之前的日期。

支持的ChronoField实例包括:

  • DAY_OF_WEEK
  • DAY_OF_MONTH
  • DAY_OF_YEAR
  • EPOCH_DAY
  • MONTH_OF_YEAR
  • PROLEPTIC_MONTH
  • YEAR_OF_ERA
  • YEAR
  • ERA
实现要求:
此类是不可变的且线程安全的。
自版本:
1.8
参见:
  • Field Details

    • INSTANCE

      public static final JapaneseChronology INSTANCE
      日本历法的单例实例。
  • Method Details

    • getId

      public String getId()
      获取年表的ID - 'Japanese'。

      ID唯一标识Chronology。可用于使用Chronology.of(String)查找Chronology

      指定者:
      getId 在接口 Chronology
      返回:
      年表ID - 'Japanese'
      参见:
    • getCalendarType

      public String getCalendarType()
      获取基础日历系统的日历类型 - 'japanese'。

      日历类型是由Unicode Locale Data Markup Language (LDML)规范定义的标识符。可用于使用Chronology.of(String)查找Chronology。也可作为区域设置的一部分,通过带有键'ca'的Locale.getUnicodeLocaleType(String)访问。

      指定者:
      getCalendarType 在接口 Chronology
      返回:
      日历系统类型 - 'japanese'
      参见:
    • date

      public JapaneseDate date(Era era, int yearOfEra, int month, int dayOfMonth)
      从纪元、年份、月份和日期字段获取日本历法系统中的本地日期。

      日本的月份和日期与ISO历法系统中的相同。在纪元更改时,它们不会被重置。例如:

        6日 昭和64年 = ISO 1989-01-06
        7日 昭和64年 = ISO 1989-01-07
        8日 平成1年 = ISO 1989-01-08
        9日 平成1年 = ISO 1989-01-09
       
      指定者:
      date 在接口 Chronology
      参数:
      era - 日本纪元,非空
      yearOfEra - 年份
      month - 月份
      dayOfMonth - 日期
      返回:
      日本本地日期,非空
      抛出:
      DateTimeException - 如果无法创建日期
      ClassCastException - 如果era不是JapaneseEra
    • date

      public JapaneseDate date(int prolepticYear, int month, int dayOfMonth)
      从纪年、年份和月份字段获取日本历法系统中的本地日期。

      日本的纪年、月份和日期与ISO历法系统中的相同。在纪元更改时,它们不会被重置。

      指定者:
      date 在接口 Chronology
      参数:
      prolepticYear - proleptic年份
      month - 月份
      dayOfMonth - 日期
      返回:
      日本本地日期,非空
      抛出:
      DateTimeException - 如果无法创建日期
    • dateYearDay

      public JapaneseDate dateYearDay(Era era, int yearOfEra, int dayOfYear)
      从纪元、年份和年内日期字段获取日本历法系统中的本地日期。

      此工厂中的年内日期是相对于年代开始的。此定义仅在年代由于纪元更改而重置为一时,才会改变年内日期的正常含义。例如:

        6日 昭和64年 = 年内日期 6
        7日 昭和64年 = 年内日期 7
        8日 平成1年 = 年内日期 1
        9日 平成1年 = 年内日期 2
       
      指定者:
      dateYearDay 在接口 Chronology
      参数:
      era - 日本纪元,非空
      yearOfEra - 年份
      dayOfYear - 年内日期
      返回:
      日本本地日期,非空
      抛出:
      DateTimeException - 如果无法创建日期
      ClassCastException - 如果era不是JapaneseEra
    • dateYearDay

      public JapaneseDate dateYearDay(int prolepticYear, int dayOfYear)
      从proleptic年和年内日期字段获取日本历法系统中的本地日期。

      此工厂中的年内日期是相对于proleptic年开始的。日本的proleptic年和年内日期与ISO历法系统中的相同。在纪元更改时,它们不会被重置。

      指定者:
      dateYearDay 在接口 Chronology
      参数:
      prolepticYear - proleptic年份
      dayOfYear - 年内日期
      返回:
      日本本地日期,非空
      抛出:
      DateTimeException - 如果无法创建日期
    • dateEpochDay

      public JapaneseDate dateEpochDay(long epochDay)
      从epoch-day获取日本历法系统中的本地日期。
      指定者:
      dateEpochDay 在接口 Chronology
      参数:
      epochDay - epoch日
      返回:
      日本本地日期,非空
      抛出:
      DateTimeException - 如果无法创建日期
    • dateNow

      public JapaneseDate dateNow()
      从接口复制的描述: Chronology
      从默认时区的系统时钟中获取当前本地日期在此年表中的值。

      这将查询默认时区中的系统时钟以获取当前日期。

      使用此方法将阻止使用替代时钟进行测试,因为时钟是硬编码的。

      指定者:
      dateNow 在接口 Chronology
      返回值:
      使用系统时钟和默认时区的当前本地日期,不为null
    • dateNow

      public JapaneseDate dateNow(ZoneId zone)
      从接口复制的描述: Chronology
      从指定时区的系统时钟中获取此年表中的当前本地日期。

      这将查询指定时区中的系统时钟以获取当前日期。指定时区可以避免依赖默认时区。

      使用此方法将阻止使用替代时钟进行测试,因为时钟是硬编码的。

      指定者:
      dateNow 在接口 Chronology
      参数:
      zone - 要使用的区域ID,不为null
      返回值:
      使用系统时钟的当前本地日期,不为null
    • dateNow

      public JapaneseDate dateNow(Clock clock)
      从接口复制的描述: Chronology
      从指定时钟中获取此年表中的当前本地日期。

      这将查询指定的时钟以获取当前日期 - 今天。使用此方法允许使用替代时钟进行测试。可以通过依赖注入引入替代时钟。

      指定者:
      dateNow 在接口 Chronology
      参数:
      clock - 要使用的时钟,不为null
      返回值:
      当前本地日期,不为null
    • date

      public JapaneseDate date(TemporalAccessor temporal)
      从接口复制的描述: Chronology
      从另一个时间对象中获取此年表中的本地日期。

      根据指定的时间对象在此年表中获取日期。 TemporalAccessor表示一组任意的日期和时间信息,此工厂将其转换为ChronoLocalDate的实例。

      转换通常使用EPOCH_DAY字段,该字段在日历系统中是标准化的。

      此方法与函数接口TemporalQuery的签名匹配,允许通过方法引用aChronology::date来使用查询。

      指定者:
      date 在接口 Chronology
      参数:
      temporal - 要转换的时间对象,不为null
      返回值:
      此年表中的本地日期,不为null
      参见:
    • localDateTime

      public ChronoLocalDateTime<JapaneseDate> localDateTime(TemporalAccessor temporal)
      从接口复制的描述: Chronology
      从另一个时间对象中获取此年表中的本地日期时间。

      根据指定的时间对象在此年表中获取日期时间。 TemporalAccessor表示一组任意的日期和时间信息,此工厂将其转换为ChronoLocalDateTime的实例。

      转换提取并组合时间对象中的ChronoLocalDateLocalTime。实现允许执行优化,例如访问等效于相关对象的字段。结果使用此年表。

      此方法与函数接口TemporalQuery的签名匹配,允许通过方法引用aChronology::localDateTime来使用查询。

      指定者:
      localDateTime 在接口 Chronology
      参数:
      temporal - 要转换的时间对象,不为null
      返回值:
      此年表中的本地日期时间,不为null
      参见:
    • zonedDateTime

      public ChronoZonedDateTime<JapaneseDate> zonedDateTime(TemporalAccessor temporal)
      从接口复制的描述: Chronology
      从另一个时间对象中获取此年表中的ChronoZonedDateTime

      根据指定的时间对象在此年表中获取分区日期时间。 TemporalAccessor表示一组任意的日期和时间信息,此工厂将其转换为ChronoZonedDateTime的实例。

      转换将首先从时间对象中获取ZoneId,必要时回退到ZoneOffset。然后尝试获取Instant,必要时回退到ChronoLocalDateTime。结果将是ZoneIdZoneOffsetInstantChronoLocalDateTime的组合。实现允许执行优化,例如访问等效于相关对象的字段。结果使用此年表。

      此方法与函数接口TemporalQuery的签名匹配,允许通过方法引用aChronology::zonedDateTime来使用查询。

      指定者:
      zonedDateTime 在接口 Chronology
      参数:
      temporal - 要转换的时间对象,不为null
      返回值:
      此年表中的分区日期时间,不为null
      参见:
    • zonedDateTime

      public ChronoZonedDateTime<JapaneseDate> zonedDateTime(Instant instant, ZoneId zone)
      从接口复制的描述: Chronology
      Instant中获取此年表中的ChronoZonedDateTime

      获取具有与指定时间相同的即时分区日期时间。

      指定者:
      zonedDateTime 在接口 Chronology
      参数:
      instant - 创建日期时间的即时时间,不为null
      zone - 时区,不为null
      返回值:
      分区日期时间,不为null
    • isLeapYear

      public boolean isLeapYear(long prolepticYear)
      检查指定年份是否为闰年。

      日本日历的闰年与ISO闰年完全一致。此方法不验证传入的年份,并且仅对支持范围内的年份具有明确定义的结果。

      指定者:
      isLeapYear 在接口 Chronology
      参数:
      prolepticYear - 要检查的纪年,未经验证的范围
      返回值:
      如果年份是闰年,则为true
    • prolepticYear

      public int prolepticYear(Era era, int yearOfEra)
      从接口复制的描述: Chronology
      根据纪元和纪元年计算纪年。

      将纪元和纪元年组合成单个纪年字段。

      如果年表积极使用纪元,例如JapaneseChronology,则将根据纪元验证纪元年。对于其他年表,验证是可选的。

      指定者:
      prolepticYear 在接口 Chronology
      参数:
      era - 适用于年表的正确类型的纪元,不为null
      yearOfEra - 年表纪元年
      返回值:
      纪年
    • eraOf

      public JapaneseEra eraOf(int eraValue)
      根据给定的数字值返回日历系统纪元对象。此方法支持的数字值与JapaneseEra.of(int)支持的数字值相同。
      指定由:
      eraOf 在接口 Chronology
      参数:
      eraValue - 时代值
      返回:
      给定数字时代值的日本 Era
      抛出:
      DateTimeException - 如果 eraValue 无效
    • eras

      public List<Era> eras()
      从接口复制的描述: Chronology
      获取年表的时代列表。

      大多数日历系统都有一个时代,其中年份具有意义。如果日历系统不支持时代的概念,则必须返回一个空列表。

      指定由:
      eras 在接口 Chronology
      返回:
      年表的时代列表,可能是不可变的,不为 null
    • range

      public ValueRange range(ChronoField field)
      从接口复制的描述: Chronology
      获取指定字段的有效值范围。

      所有字段都可以表示为一个 long 整数。此方法返回一个描述该值的有效范围的对象。

      请注意,结果仅描述最小和最大有效值,重要的是不要读取太多内容。例如,范围内可能存在对该字段无效的值。

      无论年表是否支持该字段,此方法都将返回结果。

      指定由:
      range 在接口 Chronology
      参数:
      field - 要获取范围的字段,不为 null
      返回:
      字段的有效值范围,不为 null
    • resolveDate

      public JapaneseDate resolveDate(Map<TemporalField,Long> fieldValues, ResolverStyle resolverStyle)
      从类复制的描述: AbstractChronology
      在解析期间将解析的 ChronoField 值解析为日期。

      大多数 TemporalField 实现都使用字段上的解析方法进行解析。相比之下,ChronoField 类定义了仅相对于年表具有意义的字段。因此,在此处解析 ChronoField 日期字段是在特定年表的上下文中解析的。

      通过此方法解析 ChronoField 实例,可以在子类中重写此方法。

      • EPOCH_DAY - 如果存在,则将其转换为日期,然后所有其他日期字段将与该日期进行交叉检查。
      • PROLEPTIC_MONTH - 如果存在,则将其拆分为 YEARMONTH_OF_YEAR。如果模式是 strict 或 smart,则将验证该字段。
      • YEAR_OF_ERAERA - 如果两者都存在,则将它们组合以形成一个 YEAR。在宽松模式下,不会验证 YEAR_OF_ERA 范围,在 smart 和 strict 模式下会验证。在所有三种模式下,将验证 ERA 的范围。如果只有 YEAR_OF_ERA 存在,并且模式是 smart 或 lenient,则假定最后一个可用的时代。在 strict 模式下,不会假定任何时代,而会保持 YEAR_OF_ERA 不变。如果只有 ERA 存在,则会保持不变。
      • YEARMONTH_OF_YEARDAY_OF_MONTH - 如果三者都存在,则将它们组合以形成一个日期。在所有三种模式下,将验证 YEAR。如果模式是 smart 或 strict,则将验证月份和日期。如果模式是 lenient,则将以等同于在请求的年份的第一个月的第一天创建日期的方式组合日期,然后添加月份的差异,然后添加日期的差异。如果模式是 smart,并且日期大于年月的最大日期,则将日期调整为最后一天。如果模式是 strict,则三个字段必须形成有效日期。
      • YEARDAY_OF_YEAR - 如果两者都存在,则将它们组合以形成一个日期。在所有三种模式下,将验证 YEAR。如果模式是 lenient,则将以等同于在请求年份的第一天创建日期的方式组合日期,然后添加日期的差异。如果模式是 smart 或 strict,则两个字段必须形成有效日期。
      • YEARMONTH_OF_YEARALIGNED_WEEK_OF_MONTHALIGNED_DAY_OF_WEEK_IN_MONTH - 如果四者都存在,则将它们组合以形成一个日期。在所有三种模式下,将验证 YEAR。如果模式是 lenient,则将以等同于在请求年份的第一个月的第一天创建日期的方式组合日期,然后添加月份的差异,然后添加周数的差异,然后添加日期的差异。如果模式是 smart 或 strict,则将验证所有四个字段的外部范围。然后,将以等同于在请求年份和月份的第一天创建日期的方式组合日期,然后添加周数和日期以达到它们的值。如果模式是 strict,则还将验证日期,以检查日期和周调整是否更改了月份。
      • YEARMONTH_OF_YEARALIGNED_WEEK_OF_MONTHDAY_OF_WEEK - 如果四者都存在,则将它们组合以形成一个日期。对于年份、月份和周在 ALIGNED_DAY_OF_WEEK_IN_MONTH 中的处理方式与上述描述相同。一旦处理了年份、月份和周,就会调整星期几为下一个或相同匹配的星期几。
      • YEARALIGNED_WEEK_OF_YEARALIGNED_DAY_OF_WEEK_IN_YEAR - 如果三者都存在,则将它们组合以形成一个日期。在所有三种模式下,将验证 YEAR。如果模式是 lenient,则将以等同于在请求年份的第一天创建日期的方式组合日期,然后添加周数的差异,然后添加日期的差异。如果模式是 smart 或 strict,则将验证所有三个字段的外部范围。然后,将以等同于在请求年份的第一天创建日期的方式组合日期,然后添加周数和日期以达到它们的值。如果模式是 strict,则还将验证日期,以检查日期和周调整是否更改了年份。
      • YEARALIGNED_WEEK_OF_YEARDAY_OF_WEEK - 如果三者都存在,则将它们组合以形成一个日期。对于年份和周在 ALIGNED_DAY_OF_WEEK_IN_YEAR 中的处理方式与上述描述相同。一旦处理了年份和周,就会调整星期几为下一个或相同匹配的星期几。

      默认实现适用于大多数日历系统。如果找到没有 ChronoField.YEAR_OF_ERAChronoField.ERA,则将使用 Chronology.eras() 中的最后一个时代。该实现假定一周为 7 天,每月的第一天值为 1,每年的第一天值为 1,并且每月和每年的第一天始终存在。

      指定由:
      resolveDate 在接口 Chronology
      覆盖:
      resolveDate 在类 AbstractChronology
      参数:
      fieldValues - 字段到值的映射,可以更新,不为 null
      resolverStyle - 请求的解析类型,不为 null
      返回:
      解析后的日期,如果信息不足以创建日期则为 null
    • isIsoBased

      public boolean isIsoBased()
      JapaneseChronology 是基于 ISO 的年表,支持 IsoFields 中的字段,例如 DAY_OF_QUARTERQUARTER_OF_YEAR
      指定由:
      isIsoBased 在接口 Chronology
      返回:
      true
      自 JDK 版本:
      19
      参见: