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

Class HijrahChronology

  • All Implemented Interfaces:
    SerializableComparable<Chronology>Chronology


    public final class HijrahChronology
    extends AbstractChronology
    implements Serializable
    Hijrah日历是支持伊斯兰教日历的农历。

    HijrahChronology遵循Hijrah日历系统的规则。 Hijrah日历有几个变体,基于新月确定发生的时间和观察的区别。 在一些变型中,每个月的长度由月球和地球的天文数据算术地计算,而在另一些变型中,月的长度由新月的授权瞄准确定。 对于基于算法的日历,日历可以投射到未来。 对于基于瞄准的日历,只有历史数据可以提供。

    每个月的长度是29或30天。 普通年期354天; 闰年有355天。

    CLDR和LDML识别变体:

    Variants of Hijrah Calendars Chronology ID Calendar Type Locale extension, see Locale Description Hijrah-umalqura islamic-umalqura ca-islamic-umalqura Islamic - Umm Al-Qura calendar of Saudi Arabia

    其他变体可通过Chronology.getAvailableChronologies()获得

    从区域设置中选择年表使用Chronology.ofLocale(java.util.Locale)查找基于支持BCP 47扩展机制的区域设置的年表来请求特定的日历(“ca”)。 例如,

      Locale locale = Locale.forLanguageTag("en-US-u-ca-islamic-umalqura");
          Chronology chrono = Chronology.ofLocale(locale); 
    实现要求:
    这个类是不可变的和线程安全的。
    Implementation Note:
    每个Hijrah变种单独配置。 每个变体是由定义该属性资源定义ID ,在calendar type ,日历,与ISO日历的对准,并且每个月的一定范围的年长度的开始。 这些变体由HijrahChronology作为资源从hijrah-config- <calendar type> .properties加载。

    Hijrah属性资源是描述日历的一组属性。 语法由java.util.Properties#load(Reader)定义。

    Configuration of Hijrah Calendar Property Name Property value Description id Chronology Id, for example, "Hijrah-umalqura" The Id of the calendar in common usage type Calendar type, for example, "islamic-umalqura" LDML defines the calendar types version Version, for example: "1.8.0_1" The version of the Hijrah variant data iso-start ISO start date, formatted as yyyy-MM-dd, for example: "1900-04-30" The ISO date of the first day of the minimum Hijrah year. yyyy - a numeric 4 digit year, for example "1434" The value is a sequence of 12 month lengths, for example: "29 30 29 30 29 30 30 30 29 30 29 29" The lengths of the 12 months of the year separated by whitespace. A numeric year property must be present for every year without any gaps. The month lengths must be between 29-32 inclusive.
    从以下版本开始:
    1.8
    另请参见:
    Serialized Form
    • 方法详细信息

      • getCalendarType

        public String getCalendarType​()
        获取伊斯兰历法的日历类型。

        日历类型是由Unicode区域设置数据标记语言(LDML)规范定义的标识符。 它可以用于查找Chronology使用Chronology.of(String)

        Specified by:
        getCalendarType在接口 Chronology
        结果
        日历系统类型; 如果日历具有标准类型,则为非空,否则为空
        另请参见:
        getId()
      • date

        public HijrahDate date​(Era era,
                               int yearOfEra,
                               int month,
                               int dayOfMonth)
        从Hijrah日历系统的时代,年龄,月份和月份月份获取当地的日期。
        Specified by:
        date在接口 Chronology
        参数
        era - Hijrah时代,不为空
        yearOfEra - 年代
        month - 年月
        dayOfMonth - 月的日子
        结果
        Hijrah本地日期,不为null
        异常
        DateTimeException - 如果无法创建日期
        ClassCastException - 如果 era不是 HijrahEra
      • date

        public HijrahDate date​(int prolepticYear,
                               int month,
                               int dayOfMonth)
        在Hijrah日历系统中,从幼稚年份,月份和月份月份获取当地日期。
        Specified by:
        date在接口 Chronology
        参数
        prolepticYear - prolepticYear
        month - 年月
        dayOfMonth - 月的日子
        结果
        Hijrah本地日期,不为null
        异常
        DateTimeException - 如果无法创建日期
      • dateYearDay

        public HijrahDate dateYearDay​(Era era,
                                      int yearOfEra,
                                      int dayOfYear)
        从Hijrah日历系统的时代,年龄和日期领域获得当地的日期。
        Specified by:
        dateYearDay在接口 Chronology
        参数
        era - Hijrah时代,不为空
        yearOfEra - 年代
        dayOfYear - 一年的日子
        结果
        Hijrah本地日期,不为null
        异常
        DateTimeException - 如果无法创建日期
        ClassCastException - 如果 era不是 HijrahEra
      • dateYearDay

        public HijrahDate dateYearDay​(int prolepticYear,
                                      int dayOfYear)
        从日光年和日间字段获取Hijrah日历系统中的当地日期。
        Specified by:
        dateYearDay在接口 Chronology
        参数
        prolepticYear - prolepticYear
        dayOfYear - 年的日子
        结果
        Hijrah本地日期,不为null
        异常
        DateTimeException - 如果年度的价值超出了范围,或者如果今年的日期在一年中无效
      • dateEpochDay

        public HijrahDate dateEpochDay​(long epochDay)
        从Hijrah日历系统中获取当地的日期。
        Specified by:
        dateEpochDay在接口 Chronology
        参数
        epochDay - 纪元日
        结果
        Hijrah本地日期,不为null
        异常
        DateTimeException - 如果无法创建日期
      • dateNow

        public HijrahDate dateNow​()
        说明从界面Chronology复制
        从默认时区的系统时钟获取此时间顺序中的当前本地日期。

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

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

        Specified by:
        dateNow在接口 Chronology
        结果
        当前本地日期使用系统时钟和默认时区,不为空
      • dateNow

        public HijrahDate dateNow​(ZoneId zone)
        描述从接口Chronology复制
        从指定时区的系统时钟获取此时间顺序中的当前本地日期。

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

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

        Specified by:
        dateNow在接口 Chronology
        参数
        zone - 要使用的区域ID,不为空
        结果
        当前本地日期使用系统时钟,不为null
      • dateNow

        public HijrahDate dateNow​(Clock clock)
        说明从接口Chronology复制
        从指定的时钟获取本年龄的当前本地日期。

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

        Specified by:
        dateNow在接口 Chronology
        参数
        clock - 要使用的时钟,不为空
        结果
        当前本地日期,不为null
      • date

        public HijrahDate date​(TemporalAccessor temporal)
        描述从接口Chronology复制
        从另一个时间对象获取本年龄的本地日期。

        这在这个时间表中基于指定的时间获得日期。 A TemporalAccessor表示日期和时间信息的任意集合,该工厂将转换为ChronoLocalDate的实例。

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

        该方法匹配功能接口TemporalQuery的签名,允许其通过方法参考aChronology::date用作查询。

        Specified by:
        date在接口 Chronology
        参数
        temporal - 要转换的时间对象,不为null
        结果
        这个年代的本地日期,不为空
        另请参见:
        ChronoLocalDate.from(TemporalAccessor)
      • localDateTime

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

        这在这个时间表中基于指定的时间获得日期时间。 A TemporalAccessor表示一个任意的日期和时间信息集,该工厂转换为ChronoLocalDateTime一个实例。

        转换提取并从时间对象中组合了ChronoLocalDateLocalTime 允许实现执行优化,例如访问与相关对象相当的那些字段。 结果使用这个年表。

        该方法匹配功能界面TemporalQuery的签名,允许它通过方法参考aChronology::localDateTime用作查询。

        Specified by:
        localDateTime在接口 Chronology
        参数
        temporal - 要转换的时间对象,不为null
        结果
        在这个年代的本地日期时间,不为空
        另请参见:
        ChronoLocalDateTime.from(TemporalAccessor)
      • zonedDateTime

        public ChronoZonedDateTime<HijrahDate> zonedDateTime​(TemporalAccessor temporal)
        说明从界面Chronology复制
        从另一个时间对象获得这个年龄的ChronoZonedDateTime

        根据指定的时间,在这个年表中获得一个分区的日期时间。 A TemporalAccessor代表日期和时间信息的任意集合,该工厂转换为ChronoZonedDateTime的实例。

        转换将首先从时间对象获取一个ZoneId ,如果需要,可以回到ZoneOffset 然后会尝试获得一个Instant ,如果需要的话可以回复到ChronoLocalDateTime 结果将是ZoneIdZoneOffsetInstantChronoLocalDateTime 允许实现执行优化,例如访问与相关对象相当的那些字段。 结果使用这个年表。

        该方法匹配功能界面TemporalQuery的签名,允许其通过方法参考aChronology::zonedDateTime用作查询。

        Specified by:
        zonedDateTime在接口 Chronology
        参数
        temporal - 要转换的时间对象,不为null
        结果
        在这个年代的分区日期 - 时间,不为空
        另请参见:
        ChronoZonedDateTime.from(TemporalAccessor)
      • zonedDateTime

        public ChronoZonedDateTime<HijrahDate> zonedDateTime​(Instant instant,
                                                             ZoneId zone)
        描述从界面Chronology复制
        获得ChronoZonedDateTime在从这个年表Instant

        这将获得与指定的相同时间的分区日期时间。

        Specified by:
        zonedDateTime在接口 Chronology
        参数
        instant - 即时创建日期时间,不为null
        zone - 时区,不为空
        结果
        划分的日期时间,不为空
      • isLeapYear

        public boolean isLeapYear​(long prolepticYear)
        描述从接口Chronology复制
        检查指定年份是否是闰年。

        闰年是一个比正常长的一年。 确切的含义由年龄根据以下约束决定。

        • 闰年必须意味着比非闰年更长的一年。
        • 不支持一年概念的年表必须返回假。
        • 正确的结果必须在年龄的有效范围内返回所有年份。

        在有效年龄范围之外,实施可以自由返回最佳猜测或假。 即使该年度超出有效年限的范围,实施也不能抛出异常。

        Specified by:
        isLeapYear在接口 Chronology
        参数
        prolepticYear - 检查年份,无法验证范围
        结果
        如果这一年是闰年,那么真的
      • prolepticYear

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

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

        如果年表积极利用时代,如JapaneseChronology那么年龄就会在这个时代得到验证。 对于其他年表,验证是可选的。

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

        public HijrahEra eraOf​(int eraValue)
        从数值创建HijrahEra对象。 Hijrah日历系统只有一个时代覆盖了大于0的幼年时光。 此方法返回单数HijrahEra的值1。
        Specified by:
        eraOf在接口 Chronology
        参数
        eraValue - 时代价值
        结果
        日历系统时代,不为空
        异常
        DateTimeException - 如果无法创建时代
      • eras

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

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

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

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

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

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

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

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

        public HijrahDate resolveDate​(Map<TemporalField,Long> fieldValues,
                                      ResolverStyle resolverStyle)
        描述从类复制: AbstractChronology
        解析解析中的ChronoField的日期。

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

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

        • EPOCH_DAY - 如果存在, 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
        重写:
        resolveDateAbstractChronology
        参数
        fieldValues - 可以更新的值的字段映射,不为null
        resolverStyle - 所请求的解析类型,不为空
        结果
        解决日期,如果信息不足创建日期,则为null