- 所有已实现的接口:
Serializable,Comparable<Chronology>,Chronology
HijrahChronology 遵循 Hijrah 日历系统的规则。 Hijrah 日历有几种变体,基于确定新月发生的时间和观察地点的差异。在某些变体中,每个月的长度是根据月球和地球的天文数据通过算法计算得出的,而在其他变体中,月份的长度是由授权的新月观测确定的。对于基于算法的日历,日历可以投射到未来。对于基于目击事件的日历,只有过去目击事件的历史数据可用。
每个月的长度为 29 或 30 天。平年有354天;闰年有 355 天。
CLDR 和 LDML 识别变体:
| 年表编号 | 日历类型 | locale扩展,请参阅 Locale |
Description |
|---|---|---|---|
| 回历 | islamic-umalqura | ca-伊斯兰-umalqura | 伊斯兰 - 沙特阿拉伯的 Umm Al-Qura 日历 |
可以通过 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);
- 实现要求:
- 这个类是不可变的和线程安全的。
- 实现注意事项:
-
每个 Hijrah 变体都是单独配置的。每个变体都由一个属性资源定义,该属性资源定义了
ID、calendar type、日历的开始、与 ISO 日历的对齐方式以及一系列年份中每个月的长度。这些变体由 HijrahChronology 作为来自 hijrah-config-<calendar type>.properties 的资源加载。Hijrah 属性资源是一组描述日历的属性。语法由
java.util.Properties#load(Reader)定义。属性名称 适当的值 Description id 年表 ID,例如“Hijrah-umalqura” 常用日历的Id type 日历类型,例如“islamic-umalqura” LDML 定义日历类型 version 版本,例如:“1.8.0_1” Hijrah 变体数据的版本 等启动 ISO 开始日期,格式为 yyyy-MM-dd,例如:“1900-04-30”最小回历年第一天的 ISO 日期。 yyyy - 数字 4 位数年份,例如“1434” 该值为 12 个月长度的序列,例如:“29 30 29 30 29 30 30 30 29 30 29 29” 一年中 12 个月的长度,以空格分隔。每年都必须存在一个数字年份属性,没有任何间隙。月份长度必须在 29-32 之间(含)。 可以通过在
<JAVA_HOME>/conf/chronology目录中提供配置属性文件来添加其他变体。属性文件应遵循hijrah-config-<chronology id>_<calendar type>.properties的命名约定。 - 自从:
- 1.8
- 参见:
-
字段摘要
字段 -
方法总结
修饰符和类型方法描述date(int prolepticYear, int month, int dayOfMonth) 从 proleptic-year、month-of-year 和 day-of-month 字段中获取 Hijrah 日历系统中的本地日期。从 era、year-of-era、month-of-year 和 day-of-month 字段中获取 Hijrah 日历系统中的本地日期。date(TemporalAccessor temporal) 从另一个时间对象获取此年表中的本地日期。dateEpochDay(long epochDay) 从 epoch-day 获取 Hijrah 日历系统中的本地日期。dateNow()从默认时区的系统时钟获取此年表中的当前本地日期。从指定的时钟获取此年表中的当前本地日期。从指定时区的系统时钟获取此年表中的当前本地日期。dateYearDay(int prolepticYear, int dayOfYear) 从 proleptic-year 和 day-of-year 字段中获取 Hijrah 日历系统中的本地日期。dateYearDay(Era era, int yearOfEra, int dayOfYear) 从时代、时代年份和年份字段中获取回历系统中的本地日期。eraOf(int eraValue) 根据数值创建 HijrahEra 对象。eras()获取年表的纪元列表。获取伊斯兰历的日历类型。getId()获取年表的 ID。booleanisLeapYear(long prolepticYear) 检查指定年份是否为闰年。localDateTime(TemporalAccessor temporal) 从另一个时间对象获取此年表中的本地日期时间。intprolepticYear(Era era, int yearOfEra) 计算给定时代和时代的预期年份。range(ChronoField field) 获取指定字段的有效值范围。resolveDate(Map<TemporalField, Long> fieldValues, ResolverStyle resolverStyle) 在解析期间将已解析的ChronoField值解析为日期。zonedDateTime(Instant instant, ZoneId zone) 从Instant获得此年表中的ChronoZonedDateTime。zonedDateTime(TemporalAccessor temporal) 从另一个时间对象获得此年表中的ChronoZonedDateTime。在类 java.time.chrono.AbstractChronology 中声明的方法
compareTo, equals, hashCode, toString在接口 java.time.chrono.Chronology 中声明的方法
epochSecond, epochSecond, getDisplayName, isIsoBased, period
-
字段详细信息
-
INSTANCE
沙特阿拉伯伊斯兰 Umm Al-Qura 日历的单身实例。可以从Chronology.getAvailableChronologies()获得其他 Hijrah 年表变体。
-
-
方法详情
-
getId
获取年表的 ID。ID 唯一标识
Chronology。它可用于使用Chronology.of(String)查找Chronology。- 指定者:
getId在接口Chronology中- 返回:
- 年表ID,非空
- 参见:
-
getCalendarType
获取伊斯兰历的日历类型。日历类型是由 Unicode Locale Data Markup Language (LDML) 规范定义的标识符。它可用于使用
Chronology.of(String)查找Chronology。- 指定者:
getCalendarType在接口Chronology中- 返回:
- 日历系统类型;如果日历具有标准类型则为非空,否则为空
- 参见:
-
date
从 era、year-of-era、month-of-year 和 day-of-month 字段中获取 Hijrah 日历系统中的本地日期。- 指定者:
date在接口Chronology中- 参数:
era- Hijrah 时代,不为空yearOfEra- 年代month- 月份dayOfMonth- 每月的第几天- 返回:
- Hijrah 当地日期,不为空
- 抛出:
DateTimeException- 如果无法创建日期ClassCastException- 如果era不是HijrahEra
-
date
从 proleptic-year、month-of-year 和 day-of-month 字段中获取 Hijrah 日历系统中的本地日期。- 指定者:
date在接口Chronology中- 参数:
prolepticYear- 预兆年month- 月份dayOfMonth- 每月的第几天- 返回:
- Hijrah 当地日期,不为空
- 抛出:
DateTimeException- 如果无法创建日期
-
dateYearDay
从时代、时代年份和年份字段中获取回历系统中的本地日期。- 指定者:
dateYearDay在接口Chronology中- 参数:
era- Hijrah 时代,不为空yearOfEra- 年代dayOfYear- 一年中的第几天- 返回:
- Hijrah 当地日期,不为空
- 抛出:
DateTimeException- 如果无法创建日期ClassCastException- 如果era不是HijrahEra
-
dateYearDay
从 proleptic-year 和 day-of-year 字段中获取 Hijrah 日历系统中的本地日期。- 指定者:
dateYearDay在接口Chronology中- 参数:
prolepticYear- 预兆年dayOfYear- 一年中的第几天- 返回:
- Hijrah 当地日期,不为空
- 抛出:
DateTimeException- 如果年份的值超出范围,或者年份的日期对于该年无效
-
dateEpochDay
从 epoch-day 获取 Hijrah 日历系统中的本地日期。- 指定者:
dateEpochDay在接口Chronology中- 参数:
epochDay- 纪元日- 返回:
- Hijrah 当地日期,不为空
- 抛出:
DateTimeException- 如果无法创建日期
-
dateNow
从接口Chronology复制的描述从默认时区的系统时钟获取此年表中的当前本地日期。这将在默认时区查询
system clock以获取当前日期。使用此方法将阻止使用备用时钟进行测试的能力,因为时钟是硬编码的。
- 指定者:
dateNow在接口Chronology中- 返回:
- 使用系统时钟和默认时区的当前本地日期,不为空
-
dateNow
从接口Chronology复制的描述从指定时区的系统时钟获取此年表中的当前本地日期。这将查询
system clock以获取当前日期。指定时区避免了对默认时区的依赖。使用此方法将阻止使用备用时钟进行测试的能力,因为时钟是硬编码的。
- 指定者:
dateNow在接口Chronology中- 参数:
zone- 要使用的区域 ID,不为空- 返回:
- 使用系统时钟的当前本地日期,不为空
-
dateNow
从接口Chronology复制的描述从指定的时钟获取此年表中的当前本地日期。这将查询指定的时钟以获取当前日期 - 今天。使用此方法允许使用备用时钟进行测试。可以使用
dependency injection引入备用时钟。- 指定者:
dateNow在接口Chronology中- 参数:
clock- 使用的时钟,不为空- 返回:
- 当前本地日期,不为空
-
date
从接口Chronology复制的描述从另一个时间对象获取此年表中的本地日期。这将根据指定的时间获取此年表中的日期。
TemporalAccessor表示一组任意的日期和时间信息,该工厂将其转换为ChronoLocalDate的一个实例。转换通常使用跨日历系统标准化的
EPOCH_DAY字段。此方法与功能接口
TemporalQuery的签名相匹配,允许它通过方法引用aChronology::date用作查询。- 指定者:
date在接口Chronology中- 参数:
temporal- 要转换的时间对象,不为空- 返回:
- 此年表中的本地日期,不为空
- 参见:
-
localDateTime
从接口Chronology复制的描述从另一个时间对象获取此年表中的本地日期时间。这将根据指定的时间在此年表中获取日期时间。
TemporalAccessor表示一组任意的日期和时间信息,该工厂将其转换为ChronoLocalDateTime的一个实例。转换从时间对象中提取并组合
ChronoLocalDate和LocalTime。允许实现执行优化,例如访问与相关对象等效的那些字段。结果使用此年表。此方法与功能接口
TemporalQuery的签名相匹配,允许它通过方法引用aChronology::localDateTime用作查询。- 指定者:
localDateTime在接口Chronology中- 参数:
temporal- 要转换的时间对象,不为空- 返回:
- 此年表中的本地日期时间,不为空
- 参见:
-
zonedDateTime
从接口Chronology复制的描述从另一个时间对象获得此年表中的ChronoZonedDateTime。这将根据指定的时间在此年表中获得分区日期时间。
TemporalAccessor表示一组任意的日期和时间信息,该工厂将其转换为ChronoZonedDateTime的一个实例。转换将首先从时间对象获取
ZoneId,必要时回落到ZoneOffset。然后它将尝试获取Instant,必要时回落到ChronoLocalDateTime。结果将是ZoneId或ZoneOffset与Instant或ChronoLocalDateTime的组合。允许实现执行优化,例如访问与相关对象等效的那些字段。结果使用此年表。此方法与功能接口
TemporalQuery的签名相匹配,允许它通过方法引用aChronology::zonedDateTime用作查询。- 指定者:
zonedDateTime在接口Chronology中- 参数:
temporal- 要转换的时间对象,不为空- 返回:
- 此年表中的分区日期时间,不为空
- 参见:
-
zonedDateTime
从接口Chronology复制的描述从Instant获得此年表中的ChronoZonedDateTime。这将获得与指定时刻具有相同时刻的分区日期时间。
- 指定者:
zonedDateTime在接口Chronology中- 参数:
instant- 创建日期时间的时刻,不为空zone- 时区,不为空- 返回:
- 分区日期时间,不为空
-
isLeapYear
public boolean isLeapYear(long prolepticYear) 从接口Chronology复制的描述检查指定年份是否为闰年。闰年是比正常年长的一年。确切的含义由年表根据以下限制确定。
- 闰年必须暗示比非闰年长的年份。
- 不支持年份概念的年表必须返回 false。
- 必须为年表的有效年份范围内的所有年份返回正确的结果。
在有效年份范围之外,实现可以自由返回最佳猜测或错误。即使年份超出有效年份范围,实现也不得抛出异常。
- 指定者:
isLeapYear在接口Chronology中- 参数:
prolepticYear- 要检查的预期年份,未针对范围进行验证- 返回:
- 如果这一年是闰年,则为真
-
prolepticYear
从接口Chronology复制的描述计算给定时代和时代的预期年份。这将时代和时代结合到单一的预测年字段。
如果年表积极使用纪元,例如
JapaneseChronology,那么纪元年将根据纪元进行验证。对于其他年表,验证是可选的。- 指定者:
prolepticYear在接口Chronology中- 参数:
era- 年表正确类型的时代,不为空yearOfEra- 纪年年代- 返回:
- 推算年份
-
eraOf
根据数值创建 HijrahEra 对象。 Hijrah 历法系统只有一个纪元,涵盖大于零的预历年。此方法返回值 1 的单例 HijrahEra。- 指定者:
eraOf在接口Chronology中- 参数:
eraValue- 时代值- 返回:
- 日历系统时代,不为空
- 抛出:
DateTimeException- 如果无法创建时代
-
eras
从接口Chronology复制的描述获取年表的纪元列表。大多数日历系统都有一个时代,其中年份具有意义。如果日历系统不支持时代的概念,则必须返回一个空列表。
- 指定者:
eras在接口Chronology中- 返回:
- 年表的时代列表,可能是不可变的,不为空
-
range
从接口Chronology复制的描述获取指定字段的有效值范围。所有字段都可以表示为一个
long整数。此方法返回一个描述该值有效范围的对象。请注意,结果仅描述了最小和最大有效值,重要的是不要过多地解读它们。例如,范围内可能存在对该字段无效的值。
无论年表是否支持该字段,此方法都会返回一个结果。
- 指定者:
range在接口Chronology中- 参数:
field- 获取范围的字段,不为空- 返回:
- 该字段的有效值范围,不为空
-
resolveDate
从类复制的描述:AbstractChronology在解析期间将已解析的ChronoField值解析为日期。大多数
TemporalField实现都是使用字段上的 resolve 方法解析的。相比之下,ChronoField类定义的字段仅与年表相关。因此,ChronoField日期字段在特定年表的上下文中在此处解析。ChronoField实例通过此方法解析,可能在子类中被覆盖。EPOCH_DAY- 如果存在,则将其转换为日期,然后根据日期交叉检查所有其他日期字段。PROLEPTIC_MONTH- 如果存在,则将其拆分为YEAR和MONTH_OF_YEAR。如果模式是严格的或智能的,则验证该字段。YEAR_OF_ERA和ERA- 如果两者都存在,则它们组合起来形成一个YEAR。在宽松模式下,YEAR_OF_ERA范围未被验证,在智能和严格模式下它是。ERA在所有三种模式下都针对范围进行了验证。如果只有YEAR_OF_ERA存在,并且模式是 smart 或 lenient,则假定最后一个可用时代。在严格模式下,不假定任何纪元,YEAR_OF_ERA保持不变。如果只有ERA存在,则保持不变。YEAR、MONTH_OF_YEAR和DAY_OF_MONTH- 如果所有三个都存在,则将它们组合起来形成一个日期。在所有三种模式中,YEAR都经过验证。如果模式是 smart 或 strict,则验证月份和日期。如果模式宽松,那么日期的组合方式相当于在所请求年份的第一个月的第一天创建一个日期,然后加上月差,然后加上天差。如果模式是智能的,并且每月的日期大于年月的最大值,则将日期调整为每月的最后一天。如果模式是严格的,那么这三个字段必须形成一个有效的日期。YEAR和DAY_OF_YEAR- 如果两者都存在,则将它们组合起来形成一个日期。在所有三种模式中,YEAR都经过验证。如果模式宽松,则日期的组合方式相当于在请求年份的第一天创建一个日期,然后添加天数差异。如果模式是 smart 或 strict,那么这两个字段必须形成一个有效日期。YEAR、MONTH_OF_YEAR、ALIGNED_WEEK_OF_MONTH和ALIGNED_DAY_OF_WEEK_IN_MONTH- 如果所有四个都存在,则将它们组合起来形成一个日期。在所有三种模式中,YEAR都经过验证。如果模式宽松,那么日期的组合方式相当于在所请求年份的第一个月的第一天创建一个日期,然后加上月差,然后是周差,然后是天差。如果模式是智能或严格,则所有四个字段都将验证到它们的外部范围。然后以相当于在请求的年和月的第一天创建日期的方式组合日期,然后添加以周和天为单位的数量以达到它们的值。如果模式是严格的,则会额外验证日期以检查日和周调整是否未更改月份。YEAR、MONTH_OF_YEAR、ALIGNED_WEEK_OF_MONTH和DAY_OF_WEEK- 如果所有四个都存在,则将它们组合起来形成一个日期。该方法与上面在ALIGNED_DAY_OF_WEEK_IN_MONTH中描述的年、月和周相同。处理完年、月和周后,星期几将调整为下一个或相同的匹配星期几。YEAR、ALIGNED_WEEK_OF_YEAR和ALIGNED_DAY_OF_WEEK_IN_YEAR- 如果所有三个都存在,则将它们组合起来形成一个日期。在所有三种模式中,YEAR都经过验证。如果模式宽松,则日期的组合方式相当于在所请求年份的第一天创建一个日期,然后添加以周为单位的差异,然后以天为单位。如果模式是智能或严格,则所有三个字段都将验证到它们的外部范围。然后以相当于在所请求年份的第一天创建一个日期的方式组合日期,然后添加以周和天为单位的数量以达到它们的值。如果模式是严格的,则会额外验证日期以检查日期和星期的调整是否未更改年份。YEAR、ALIGNED_WEEK_OF_YEAR和DAY_OF_WEEK- 如果所有三个都存在,则将它们组合起来形成一个日期。该方法与上面在ALIGNED_DAY_OF_WEEK_IN_YEAR中描述的年和周相同。一旦处理了年和周,星期几就会调整为下一个或相同的匹配星期几。
默认实现适用于大多数日历系统。如果发现
ChronoField.YEAR_OF_ERA没有ChronoField.ERA,则使用Chronology.eras()中的最后一个纪元。该实现假定每周有 7 天,每月的第一天值为 1,每年的第一天值为 1,并且月份和年份的第一天始终存在。- 指定者:
resolveDate在接口Chronology中- 重写:
resolveDate在类AbstractChronology中- 参数:
fieldValues- 字段到值的映射,可以更新,不为空resolverStyle- 请求的解析类型,不为空- 返回:
- 解决日期,如果信息不足以创建日期则为 null
-