Module  java.base
软件包  java.time.chrono

Class AbstractChronology

  • All Implemented Interfaces:
    Comparable<Chronology>Chronology
    已知直接子类:
    HijrahChronologyIsoChronologyJapaneseChronologyMinguoChronologyThaiBuddhistChronology


    public abstract class AbstractChronology
    extends Object
    implements Chronology
    用于组织和识别日期的日历系统的抽象实现。

    主要的日期和时间API建立在ISO日历系统上。 年表在幕后操作,代表日历系统的一般概念。

    详见Chronology

    实现要求:
    该类与Chronology接口分离,以使静态方法不被继承。 虽然可以直接实现Chronology ,但强烈建议扩展这个抽象类。

    必须小心实施此类,以确保其他类正确运行。 可以实例化的所有实现必须是最终的,不可变的和线程安全的。 子类应尽可能可序列化。

    从以下版本开始:
    1.8
    • 构造方法详细信息

      • AbstractChronology

        protected AbstractChronology​()
        创建一个实例。
    • 方法详细信息

      • resolveDate

        public ChronoLocalDate resolveDate​(Map<TemporalField,Long> fieldValues,
                                           ResolverStyle resolverStyle)
        解析时解析ChronoField值到一个日期。

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

        ChronoField实例通过此方法解决,这可能会在子类中被覆盖。

        • EPOCH_DAY - 如果存在,将转换为日期,然后根据日期对所有其他日期字段进行交叉检查。
        • PROLEPTIC_MONTH - 如果存在,那么它被分割成YEARMONTH_OF_YEAR 如果模式是严格的或智能的,则该字段被验证。
        • YEAR_OF_ERAERA - 如果两者都存在,则它们被组合以形成YEAR 在宽松的模式下, YEAR_OF_ERA范围是无法验证的,在智能和严格的模式下。 在所有三种模式下, ERA的范围都被验证。 如果只有YEAR_OF_ERA存在,并且模式是聪明或宽松的,那么假定最后一个可用的时代。 在严格的模式下,没有任何一个时代被假定,而YEAR_OF_ERA没有被触动。 如果只有ERA存在,那么它保持不变。
        • YEARMONTH_OF_YEARDAY_OF_MONTH -如果所有三个都存在,那么它们被组合成一个日期。 在所有三种模式下, YEAR都经过验证。 如果模式是聪明或严格的,则验证月和日。 如果模式宽松,则以相当于在请求年份的第一个月的第一天创建日期的方式组合日期,然后将月份中的差额加上差异天数。 如果模式是聪明的,并且月的日期大于年月的最大值,则月的日期被调整到最后一个月。 如果模式严格,则三个字段必须形成有效的日期。
        • YEARDAY_OF_YEAR - 如果两者都存在,则将它们组合以形成日期。 在所有三种模式下, YEAR都经过验证。 如果模式宽松,那么日期将以相当于在请求年的第一天创建日期的方式组合,然后加上差异。 如果模式是聪明或严格的,那么这两个字段必须形成一个有效的日期。
        • YEARMONTH_OF_YEARALIGNED_WEEK_OF_MONTHALIGNED_DAY_OF_WEEK_IN_MONTH -如果所有四个都存在,则它们被组合以形成一个日期。 在所有三种模式下, YEAR都经过验证。 如果该模式宽松,那么日期将以相当于在所请求的年份的第一个月的第一天创建日期的方式组合,然后加上月差,然后以周为单位,然后以天为单位。 如果模式是聪明或严格的,那么所有四个字段都将被验证到其外部范围。 然后将该日期以相当于在所请求的年和月的第一天创建日期的方式组合,然后以数周和数天的数量添加以达到其值。 如果模式严格,则还会验证日期,以检查日和周的调整次数是否不变。
        • YEARMONTH_OF_YEARALIGNED_WEEK_OF_MONTHDAY_OF_WEEK -如果所有四个都存在,则它们被组合以形成一个日期。 该方法与上述相同,多年,数月ALIGNED_DAY_OF_WEEK_IN_MONTH周在ALIGNED_DAY_OF_WEEK_IN_MONTH 一天一个月,几周和几周已被处理,星期几被调整为下一个或相同的匹配日。
        • YEARALIGNED_WEEK_OF_YEARALIGNED_DAY_OF_WEEK_IN_YEAR -如果所有三个都存在,那么它们被组合成一个日期。 在所有三种模式下, YEAR都经过验证。 如果模式宽松,那么日期以相当于在所请求年的第一天创建日期的方式组合,然后以周为单位加上差异。 如果模式是聪明或严格的,那么所有三个字段都将被验证到其外部范围。 然后,该日期以相当于在所请求年的第一天创建日期的方式组合,然后以数周和数天添加以达到其值。 如果模式严格,日期也会被验证,以检查日和周的调整没有改变年份。
        • YEARALIGNED_WEEK_OF_YEARDAY_OF_WEEK -如果所有三个都存在,那么它们被组合成一个日期。 该方法与上述ALIGNED_DAY_OF_WEEK_IN_YEAR数年ALIGNED_DAY_OF_WEEK_IN_YEARALIGNED_DAY_OF_WEEK_IN_YEAR 一天一周的时间一周调整为下一个或相同的匹配日期,一年的时间和周数被处理。

        默认实现适用于大多数日历系统。 如果发现ChronoField.YEAR_OF_ERA没有ChronoField.ERA那么最后一个时代在Chronology.eras()被使用。 实施假定为7天,第一个月的日期为1,第一天的值为1,并且月份和年份的第一个始终存在。

        Specified by:
        resolveDate在接口 Chronology
        参数
        fieldValues - 可以更新的值的字段映射,不为空
        resolverStyle - 请求的解析类型,不为null
        结果
        解决日期,如果信息不足创建日期,则为null
        异常
        DateTimeException - 如果日期无法解决,通常是因为输入数据中存在冲突
      • compareTo

        public int compareTo​(Chronology other)
        将这个年表与另一个年表进行比较。

        比较顺序首先按年表ID字符串,然后通过特定于子类的任何附加信息。 它与“等于”一致,如Comparable所定义。

        Specified by:
        compareTo在接口 Chronology
        Specified by:
        compareTo在接口 Comparable<Chronology>
        实现要求:
        这个实现比较了时间序列ID。 子类必须比较它们存储的任何其他状态。
        参数
        other - 其他年表要比较,不为null
        结果
        比较器值为负,如果较小,则如果较大则为正
      • toString

        public String toString​()
        输出这个年表为 String ,使用年表ID。
        Specified by:
        toString在接口 Chronology
        重写:
        toStringObject
        结果
        这个年表的字符串表示,不为null