Module java.base
Package java.time.chrono

Class IsoChronology

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

public final class IsoChronology extends AbstractChronology implements Serializable
ISO日历系统。

此年表定义了ISO日历系统的规则。该日历系统基于ISO-8601标准,这是事实上的世界日历。

字段定义如下:

  • era - 有两个时代,'当前时代' (CE) 和 '当前时代之前' (BCE)。
  • year-of-era - 年代与当前CE时代的追代年份相同。对于ISO纪元之前的BCE时代,随着时间倒退,年份从1开始递增。
  • proleptic-year - 追代年份与当前时代的年代相同。对于之前的时代,年份为零,然后为负值。
  • month-of-year - ISO年份有12个月,从1到12编号。
  • day-of-month - 每个ISO月份有28到31天,从1到31编号。4、6、9和11月有30天,1、3、5、7、8、10和12月有31天。2月有28天,闰年有29天。
  • day-of-year - 标准ISO年有365天,闰年有366天。天数从1到365或1到366编号。
  • leap-year - 闰年每4年一次,除非年份可被100整除且不可被400整除。
实现要求:
此类是不可变的且线程安全的。
自 JDK 版本:
1.8
参见:
  • Field Details

    • INSTANCE

      public static final IsoChronology INSTANCE
      ISO年表的单例实例。
  • Method Details

    • getId

      public String getId()
      获取年表的ID - 'ISO'。 Chronology。可用于使用 Chronology.of(String)查找 Chronology

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

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

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

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

      public LocalDate date(Era era, int yearOfEra, int month, int dayOfMonth)
      从时代、年代中的年份、月份中的月份和月份中的日期字段获取ISO本地日期。
      指定者:
      date 在接口 Chronology
      参数:
      era - ISO时代,非空
      yearOfEra - ISO年代中的年份
      month - ISO年份中的月份
      dayOfMonth - ISO月份中的日期
      返回:
      ISO本地日期,非空
      抛出:
      DateTimeException - 如果无法创建日期
      ClassCastException - 如果era的类型不是IsoEra
    • date

      public LocalDate date(int prolepticYear, int month, int dayOfMonth)
      从追代年份、年份中的月份和月份中的日期字段获取ISO本地日期。

      这相当于LocalDate.of(int, int, int)

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

      public LocalDate dateYearDay(Era era, int yearOfEra, int dayOfYear)
      从时代、年代中的年份和年份中的年份字段获取ISO本地日期。
      指定者:
      dateYearDay 在接口 Chronology
      参数:
      era - ISO时代,非空
      yearOfEra - ISO年代中的年份
      dayOfYear - ISO年份中的年份
      返回:
      ISO本地日期,非空
      抛出:
      DateTimeException - 如果无法创建日期
    • dateYearDay

      public LocalDate dateYearDay(int prolepticYear, int dayOfYear)
      从追代年份和年份中的年份字段获取ISO本地日期。

      这相当于LocalDate.ofYearDay(int, int)

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

      public LocalDate dateEpochDay(long epochDay)
      从纪元日获取ISO本地日期。

      这相当于LocalDate.ofEpochDay(long)

      指定者:
      dateEpochDay 在接口 Chronology
      参数:
      epochDay - 纪元日
      返回:
      ISO本地日期,非空
      抛出:
      DateTimeException - 如果无法创建日期
    • date

      public LocalDate date(TemporalAccessor temporal)
      从另一个日期时间对象获取ISO本地日期。

      这相当于LocalDate.from(TemporalAccessor)

      指定者:
      date 在接口 Chronology
      参数:
      temporal - 要转换的日期时间对象,不能为空
      返回:
      ISO本地日期,不能为空
      抛出:
      DateTimeException - 如果无法创建日期
      参见:
    • epochSecond

      public long epochSecond(int prolepticYear, int month, int dayOfMonth, int hour, int minute, int second, ZoneOffset zoneOffset)
      从1970-01-01T00:00:00Z时代获取秒数。

      秒数是使用年份、月份、日期、小时、分钟、秒和zoneOffset计算的。

      指定者:
      epochSecond 在接口 Chronology
      参数:
      prolepticYear - 年份,从MIN_YEAR到MAX_YEAR
      month - 年份中的月份,从1到12
      dayOfMonth - 月份中的日期,从1到31
      hour - 一天中的小时,从0到23
      minute - 小时中的分钟,从0到59
      second - 分钟中的秒,从0到59
      zoneOffset - 区偏移,不能为空
      返回:
      相对于1970-01-01T00:00:00Z的秒数,可能为负数
      抛出:
      DateTimeException - 如果任何参数的值超出范围,或者日期的日期无效
      自:
      9
    • localDateTime

      public LocalDateTime localDateTime(TemporalAccessor temporal)
      从另一个日期时间对象获取ISO本地日期时间。

      这相当于LocalDateTime.from(TemporalAccessor)

      指定者:
      localDateTime 在接口 Chronology
      参数:
      temporal - 要转换的日期时间对象,不能为空
      返回:
      ISO本地日期时间,不能为空
      抛出:
      DateTimeException - 如果无法创建日期时间
      参见:
    • zonedDateTime

      public ZonedDateTime zonedDateTime(TemporalAccessor temporal)
      从另一个日期时间对象获取ISO分区日期时间。

      这相当于ZonedDateTime.from(TemporalAccessor)

      指定者:
      zonedDateTime 在接口 Chronology
      参数:
      temporal - 要转换的日期时间对象,不能为空
      返回:
      ISO分区日期时间,不能为空
      抛出:
      DateTimeException - 如果无法创建日期时间
      参见:
    • zonedDateTime

      public ZonedDateTime zonedDateTime(Instant instant, ZoneId zone)
      Instant在此年表中获取ISO分区日期时间。

      这相当于ZonedDateTime.ofInstant(Instant, ZoneId)

      指定者:
      zonedDateTime 在接口 Chronology
      参数:
      instant - 创建日期时间的即时对象,不能为空
      zone - 时区,不能为空
      返回:
      分区日期时间,不能为空
      抛出:
      DateTimeException - 如果结果超出支持范围
    • dateNow

      public LocalDate dateNow()
      从默认时区的系统时钟获取当前ISO本地日期。

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

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

      指定者:
      dateNow 在接口 Chronology
      返回:
      使用系统时钟和默认时区获取的当前ISO本地日期,不能为空
      抛出:
      DateTimeException - 如果无法创建日期
    • dateNow

      public LocalDate dateNow(ZoneId zone)
      从指定时区的系统时钟获取当前ISO本地日期。

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

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

      指定者:
      dateNow 在接口 Chronology
      参数:
      zone - 要使用的区域ID,不能为空
      返回:
      使用系统时钟获取的当前ISO本地日期,不能为空
      抛出:
      DateTimeException - 如果无法创建日期
    • dateNow

      public LocalDate dateNow(Clock clock)
      从指定时钟获取当前ISO本地日期。

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

      指定者:
      dateNow 在接口 Chronology
      参数:
      clock - 要使用的时钟,不能为空
      返回:
      当前ISO本地日期,不能为空
      抛出:
      DateTimeException - 如果无法创建日期
    • isLeapYear

      public boolean isLeapYear(long prolepticYear)
      根据ISO proleptic日历系统规则检查年份是否为闰年。

      此方法应用整个时间线上当前的闰年规则。一般来说,如果年份可以被4整除,则是闰年。然而,能被100整除的年份不是闰年,但能被400整除的年份是。

      例如,1904年是闰年,因为可以被4整除。1900年不是闰年,因为可以被100整除,但2000年是闰年,因为可以被400整除。

      计算是proleptic的 - 将相同的规则应用到遥远的未来和过去。这在历史上是不准确的,但对于ISO-8601标准是正确的。

      指定者:
      isLeapYear 在接口 Chronology
      参数:
      prolepticYear - 要检查的ISO proleptic年份
      返回:
      如果年份是闰年,则为true,否则为false
    • prolepticYear

      public int prolepticYear(Era era, int yearOfEra)
      从接口复制的描述: Chronology
      给定时代和年份,计算proleptic年份。

      这将时代和年份合并为单个proleptic年份字段。

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

      指定者:
      prolepticYear 在接口 Chronology
      参数:
      era - 与年表类型相符的时代,不能为空
      yearOfEra - 年表的年份
      返回:
      proleptic年份
    • eraOf

      public IsoEra eraOf(int eraValue)
      从接口复制的描述: Chronology
      根据数字值创建年表时代对象。

      时代在概念上是时间线的最大划分。大多数日历系统有一个将时间线分为两个时代的单一纪元。然而,有些有多个时代,例如每位领导人的统治一个时代。确切的含义由年表根据以下约束确定。

      1970-01-01时使用的时代必须具有值1。后续时代必须具有依次更高的值。较早的时代必须具有依次更低的值。每个年表必须引用一个枚举或类似的单例来提供时代值。

      此方法返回指定时代值的正确类型的单例时代。

      指定者:
      eraOf 在接口 Chronology
      参数:
      eraValue - 时代值
      返回值:
      日历系统的时代,不为null
    • eras

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

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

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

      public LocalDate resolveDate(Map<TemporalField,Long> fieldValues, ResolverStyle resolverStyle)
      将解析的ChronoField值解析为日期。

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

      ISO日历系统上的ChronoField实例解析如下。

      • EPOCH_DAY - 如果存在,则将其转换为LocalDate,然后将所有其他日期字段与该日期进行交叉检查。
      • PROLEPTIC_MONTH - 如果存在,则将其拆分为YEARMONTH_OF_YEAR。如果模式是strict或smart,则对字段进行验证。
      • YEAR_OF_ERAERA - 如果两者都存在,则将它们组合成一个YEAR。在宽松模式中,不会验证YEAR_OF_ERA范围,在智能和严格模式中会验证。在所有三种模式中,将验证ERA的范围。如果只有YEAR_OF_ERA存在,并且模式是smart或lenient,则假定当前时代(CE/AD)。在严格模式下,不会假定任何时代,而会保持YEAR_OF_ERA不变。如果只有ERA存在,则会保持不变。
      • YEARMONTH_OF_YEARDAY_OF_MONTH - 如果三者都存在,则将它们组合成一个LocalDate。在所有三种模式中,将验证YEAR。如果模式是smart或strict,则将验证月份和日期,日期从1到31进行验证。如果模式是lenient,则将日期组合成等同于在请求的年份的一月一日创建日期,然后添加月份差异,然后添加日期差异的方式。如果模式是smart,并且日期大于年月的最大日期,则将日期调整为该月的最后一天。如果模式是strict,则这三个字段必须形成有效日期。
      • YEARDAY_OF_YEAR - 如果两者都存在,则将它们组合成一个LocalDate。在所有三种模式中,将验证YEAR。如果模式是lenient,则将日期组合成等同于在请求的年份的一月一日创建日期,然后添加日期差异。如果模式是smart或strict,则这两个字段必须形成有效日期。
      • YEARMONTH_OF_YEARALIGNED_WEEK_OF_MONTHALIGNED_DAY_OF_WEEK_IN_MONTH - 如果四者都存在,则将它们组合成一个LocalDate。在所有三种模式中,将验证YEAR。如果模式是lenient,则将日期组合成等同于在请求的年份的一月一日创建日期,然后添加月份差异,然后添加周差异,然后添加日期差异。如果模式是smart或strict,则所有四个字段将验证其外部范围。然后以等同于在请求的年份和月份的第一天创建日期的方式组合日期,然后添加周和日期的数量以达到它们的值。如果模式是strict,则还将验证日期,以检查日期和周调整是否更改了月份。
      • YEARMONTH_OF_YEARALIGNED_WEEK_OF_MONTHDAY_OF_WEEK - 如果四者都存在,则将它们组合成一个LocalDate。对于年份、月份和周中的年份,月份和周的处理方式与上述相同。一旦处理了年份、月份和周,就会调整星期几为下一个或相同的匹配星期几。
      • YEARALIGNED_WEEK_OF_YEARALIGNED_DAY_OF_WEEK_IN_YEAR - 如果三者都存在,则将它们组合成一个LocalDate。在所有三种模式中,将验证YEAR。如果模式是lenient,则将日期组合成等同于在请求的年份的一月一日创建日期,然后添加周差异,然后添加日期差异。如果模式是smart或strict,则所有三个字段将验证其外部范围。然后以等同于在请求的年份的第一天创建日期的方式组合日期,然后添加周和日期的数量以达到它们的值。如果模式是strict,则还将验证日期,以检查日期和周调整是否更改了年份。
      • YEARALIGNED_WEEK_OF_YEARDAY_OF_WEEK - 如果三者都存在,则将它们组合成一个LocalDate。对于年份和周中的年份和周的处理方式与上述相同。一旦处理了年份和周,就会调整星期几为下一个或相同的匹配星期几。
      指定者:
      resolveDate 在接口 Chronology
      覆盖:
      resolveDate 在类 AbstractChronology
      参数:
      fieldValues - 字段到值的映射,可以更新,不为null
      resolverStyle - 请求的解析类型,不为null
      返回值:
      解析后的日期,如果没有足够的信息创建日期则为null
      抛出:
      DateTimeException - 如果无法解析日期,通常是因为输入数据冲突
    • range

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

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

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

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

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

      public Period period(int years, int months, int days)
      基于年、月和日获取此年表的周期。

      使用指定的年、月和日返回与ISO年表相关联的周期。有关详细信息,请参阅Period

      指定者:
      period 在接口 Chronology
      参数:
      years - 年数,可以为负数
      months - 月数,可以为负数
      days - 天数,可以为负数
      返回值:
      ISO周期,不为null
    • isIsoBased

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