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

Class IsoChronology

  • All Implemented Interfaces:
    SerializableComparable<Chronology>Chronology


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

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

    字段定义如下:

    • 时代 - 有两个时代,“当代时代”(CE)和“当前时代之前”(BCE)。
    • 年代 - 同时代与现在的CE时代的幼稚年一样。 对于在ISO纪元前的BCE时代,年份随着时间的推移从1上升。
    • 幼稚年份 - 幼稚年份与当今时代相同。 对于以前的时代,岁月有零,然后负值。
    • 每年的一个月 - ISO年有12个月,从1到12。
    • 月份 - 每个ISO月份的日期为28至31天,编号为1至31.月份4,6,9和11有30天,第1,3,5,7,8,10 12人有31天。 第2个月有28天,闰年有29天。
    • 一年 - 标准ISO年有365天,闰年366天。 天数从1到365或1到366。
    • 闰年 - 闰年每4年发生一次,除了年份是100分,而不是400分。
    实现要求:
    这个类是不可变的和线程安全的。
    从以下版本开始:
    1.8
    另请参见:
    Serialized Form
    • 字段详细信息

      • INSTANCE

        public static final IsoChronology INSTANCE
        ISO年代的单例实例。
    • 方法详细信息

      • getCalendarType

        public String getCalendarType​()
        获取底层日历系统的日历类型 - 'iso8601'。

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

        Specified by:
        getCalendarType在接口 Chronology
        结果
        日历系统类型 - 'iso8601'
        另请参见:
        getId()
      • date

        public LocalDate date​(Era era,
                              int yearOfEra,
                              int month,
                              int dayOfMonth)
        从时代,年龄,月份和月份的时代获得ISO本地日期。
        Specified by:
        date在接口 Chronology
        参数
        era - ISO时代,不为空
        yearOfEra - ISO年代
        month - ISO月份
        dayOfMonth - ISO的日期
        结果
        ISO本地日期,不为空
        异常
        DateTimeException - 如果无法创建日期
        ClassCastException -如果类型 eraIsoEra
      • date

        public LocalDate date​(int prolepticYear,
                              int month,
                              int dayOfMonth)
        从月度,月份和月份月份获取ISO本地日期。

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

        Specified by:
        date在接口 Chronology
        参数
        prolepticYear - ISO prolepticYear
        month - ISO月份
        dayOfMonth - ISO的日期
        结果
        ISO本地日期,不为空
        异常
        DateTimeException - 如果无法创建日期
      • dateYearDay

        public LocalDate dateYearDay​(Era era,
                                     int yearOfEra,
                                     int dayOfYear)
        从时代,年龄和日期的领域获得ISO本地日期。
        Specified by:
        dateYearDay在接口 Chronology
        参数
        era - ISO时代,不为空
        yearOfEra - ISO年代
        dayOfYear - ISO的日期
        结果
        ISO本地日期,不为空
        异常
        DateTimeException - 如果无法创建日期
      • dateYearDay

        public LocalDate dateYearDay​(int prolepticYear,
                                     int dayOfYear)
        从幼稚年份和日期字段获取ISO本地日期。

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

        Specified by:
        dateYearDay在接口 Chronology
        参数
        prolepticYear - ISO prolepticYear
        dayOfYear - ISO的一年
        结果
        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计算的。

        Specified by:
        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 - 如果任何参数的值超出范围,或者如果月的日期对 DateTimeException无效
        从以下版本开始:
        9
      • dateNow

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

        这将查询默认时区中的system clock以获取当前日期。

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

        Specified by:
        dateNow在接口 Chronology
        结果
        当前ISO本地日期使用系统时钟和默认时区,不为空
        异常
        DateTimeException - 如果无法创建日期
      • dateNow

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

        这将查询system clock获取当前日期。 指定时区可以避免对默认时区的依赖。

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

        Specified by:
        dateNow接口 Chronology
        参数
        zone - 要使用的区域ID,不为空
        结果
        当前ISO本地日期使用系统时钟,不为空
        异常
        DateTimeException - 如果无法创建日期
      • dateNow

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

        这将查询指定的时钟以获取当前日期 - 今天。 使用此方法可以使用备用时钟进行测试。 可以使用dependency injection引入备用时钟。

        Specified by:
        dateNow在接口 Chronology
        参数
        clock - 要使用的时钟,不为空
        结果
        当前的ISO本地日期,不为null
        异常
        DateTimeException - 如果无法创建日期
      • isLeapYear

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

        这种方法在整个时间线上应用目前的闰年规则。 一般来说,一年是一个闰年,如果没有余数可以被四分割。 但是,除了100岁之外,年份可以被分割为100岁,除了年龄可以被400除外。

        例如,1904年是一个闰年,可以被4整除。1900年不是一个闰年,因为它可以被100整除,然而2000年是一个闰年,因为它可以被400除数。

        计算是应激的 - 将相同的规则应用到远未来很远的地方。 这在历史上是不准确的,但对于ISO-8601标准是正确的。

        Specified by:
        isLeapYear在接口 Chronology
        参数
        prolepticYear - ISO检测年份
        结果
        如果一年是飞跃,否则为假
      • prolepticYear

        public int prolepticYear​(Era era,
                                 int yearOfEra)
        说明从界面Chronology复制
        计算年龄和年龄的幼年时期。

        这将时代与时代融为一体的年轻一代。

        如果年表积极使用时代,如JapaneseChronology那么年代将在时代得到验证。 对于其他年表,验证是可选的。

        Specified by:
        prolepticYear在接口 Chronology
        参数
        era - 时代的正确类型为年表,不为空
        yearOfEra - 年代的年代
        结果
        幼稚的一年
      • eraOf

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

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

        1970-01-01使用的时代必须具有值1.后来的时代必须具有较高的值。 较早的时间必须具有较低的值。 每个年表必须参考枚举或类似的单身,以提供时代价值观。

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

        Specified by:
        eraOf在接口 Chronology
        参数
        eraValue - 时代价值
        结果
        日历系统时代,不为空
      • eras

        public List<Era> eras​()
        说明从界面Chronology复制
        获取年表的时间列表。

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

        Specified by:
        eras在接口 Chronology
        结果
        时间表的时代列表可能是不可变的,不为零
      • resolveDate

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

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

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

        • EPOCH_DAY - 如果存在, EPOCH_DAY其转换为LocalDate ,然后根据日期对所有其他日期字段进行交叉检查。
        • PROLEPTIC_MONTH - 如果存在,那么它被分割成YEARMONTH_OF_YEAR 如果模式是严格的或智能的,则该字段被验证。
        • YEAR_OF_ERAERA - 如果两者都存在,则它们被组合以形成YEAR 在宽松的模式下, YEAR_OF_ERA范围是无法验证的,在智能和严格的模式下。 在所有三种模式下, ERA的范围都被验证。 如果只有YEAR_OF_ERA存在,并且模式是聪明或宽松的,则假设当前时代(CE / AD)。 在严格的模式下,没有任何时代被假定,而YEAR_OF_ERA没有被触动。 如果只有ERA存在,那么它是保持不变的。
        • YEARMONTH_OF_YEARDAY_OF_MONTH -如果所有三个都存在,则它们被组合以形成LocalDate 在所有三种模式下, YEAR都经过验证。 如果模式是聪明的或严格的,则验证月份和日期,日期从1到31.如果模式宽松,那么日期以相当于在1月1日创建日期的方式组合要求的年份,然后加上差异在几个月,然后差异在天。 如果模式是聪明的,并且月的日期大于年月的最大值,则月的日期被调整到最后一个月。 如果模式严格,则三个字段必须形成有效的日期。
        • YEARDAY_OF_YEAR - 如果两者都存在,则它们被组合以形成LocalDate 在所有三种模式下, YEAR都经过验证。 如果模式宽松,那么日期将以等于在请求年份的1月1日创建日期的方式组合,然后加上差异。 如果模式是聪明或严格的,那么这两个字段必须形成一个有效的日期。
        • YEARMONTH_OF_YEARALIGNED_WEEK_OF_MONTHALIGNED_DAY_OF_WEEK_IN_MONTH -如果所有四个都存在,则它们被组合以形成LocalDate 在所有三种模式下, YEAR都经过验证。 如果该模式宽松,那么日期将以等于在请求年份的1月1日创建日期的方式进行组合,然后加上差异月份,然后加上周差,然后加几天。 如果模式是聪明或严格的,那么所有四个字段都将被验证到其外部范围。 然后将该日期以相当于在所请求的年和月的第一天创建日期的方式组合,然后以数周和数天的数量添加以达到其值。 如果模式严格,则还会验证日期,以检查日和周的调整次数是否不变。
        • YEARMONTH_OF_YEARALIGNED_WEEK_OF_MONTHDAY_OF_WEEK -如果所有四个都存在,则它们被组合以形成LocalDate 该方法与上述相同,多年,数月ALIGNED_DAY_OF_WEEK_IN_MONTH周在ALIGNED_DAY_OF_WEEK_IN_MONTH 一天一个月,几周和几周已被处理,星期几被调整为下一个或相同的匹配日。
        • YEARALIGNED_WEEK_OF_YEARALIGNED_DAY_OF_WEEK_IN_YEAR -如果所有三个都存在,则它们被组合以形成LocalDate 在所有三种模式下, YEAR都经过验证。 如果模式宽松,那么日期将以等同于在请求年份的1月1日创建日期的方式组合,然后以周为单位加上差异。 如果模式是聪明或严格的,那么所有三个字段都将被验证到其外部范围。 然后,该日期以相当于在所请求年的第一天创建日期的方式组合,然后以数周和数天添加以达到其值。 如果模式严格,日期也会被验证,以检查日和周的调整没有改变年份。
        • YEARALIGNED_WEEK_OF_YEARDAY_OF_WEEK -如果所有三个都存在,则它们被组合以形成LocalDate 该方法与上述ALIGNED_DAY_OF_WEEK_IN_YEAR中的上述相同。 一天一周的时间一周调整为下一个或相同的匹配日期,一年的时间和周数被处理。
        Specified by:
        resolveDate在接口 Chronology
        重写:
        resolveDateAbstractChronology
        参数
        fieldValues - 可以更新的值的字段映射,不为空
        resolverStyle - 所请求的解析类型,不为null
        结果
        解决日期,如果信息不足创建日期,则为null
        异常
        DateTimeException - 如果日期无法解决,通常是因为输入数据中存在冲突
      • range

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

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

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

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

        Specified by:
        range在接口 Chronology
        参数
        field - 获取范围的字段,不为null
        结果
        字段的有效值的范围不为null
      • period

        public Period period​(int years,
                             int months,
                             int days)
        根据几年,几个月和几天的时间表获得一段时间。

        这将使用指定的年份,月份和日期返回与ISO年表相关的期间。 详见Period

        Specified by:
        period在接口 Chronology
        参数
        years - 年数可能为负数
        months - 年数,可能为负数
        days - 年数,可能为负数
        结果
        这个时间期限在这个年代,不为零