public final class HijrahChronology extends AbstractChronology implements Serializable
HijrahChronology遵循Hijrah日历系统的规则。 Hijrah日历有几个变体,基于新月确定发生的时间和观察的区别。 在一些变型中,每个月的长度由月球和地球的天文数据算术地计算,而在另一些变型中,月的长度由新月的授权瞄准确定。 对于基于算法的日历,日历可以投射到未来。 对于基于瞄准的日历,只有历史数据可以提供。
每个月的长度是29或30天。 普通年期354天; 闰年有355天。
CLDR和LDML识别变体:
Chronology ID Calendar Type Locale extension, seeLocale
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);
ID
时, calendar type
,日历,与ISO日历的对准,并且每个月的一定范围的年长度的开始。
这些变体在calendars.properties
文件中calendars.properties
。
新的属性前缀为"calendars.hijrah."
:
Property Name Property value Description calendars.hijrah.{ID} The property resource defining the {ID}
variant The property resource is located with the calendars.properties
file calendars.hijrah.{ID}.type The calendar type LDML defines the calendar type names
Hijrah属性资源是描述日历的一组属性。 语法由java.util.Properties#load(Reader)
定义。
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.
Modifier and Type | Field and Description |
---|---|
static HijrahChronology |
INSTANCE
沙特阿拉伯伊斯兰教Umm Al-Qura日历的单身人士例子。
|
Modifier and Type | Method and Description |
---|---|
HijrahDate |
date(Era era, int yearOfEra, int month, int dayOfMonth)
从Hijrah日历系统的时代,年龄,月份和月份月份获取当地的日期。
|
HijrahDate |
date(int prolepticYear, int month, int dayOfMonth)
在Hijrah日历系统中,从幼稚年份,月份和月份月份获取当地日期。
|
HijrahDate |
date(TemporalAccessor temporal)
从另一个时间对象获取本年龄的本地日期。
|
HijrahDate |
dateEpochDay(long epochDay)
从Hijrah日历系统中获取当地的日期。
|
HijrahDate |
dateNow()
从默认时区的系统时钟获取此时间顺序中的当前本地日期。
|
HijrahDate |
dateNow(Clock clock)
从指定的时钟获取本年龄的当前本地日期。
|
HijrahDate |
dateNow(ZoneId zone)
从指定时区的系统时钟获取此时间顺序中的当前本地日期。
|
HijrahDate |
dateYearDay(Era era, int yearOfEra, int dayOfYear)
从Hijrah日历系统的时代,年龄和日期领域获得当地的日期。
|
HijrahDate |
dateYearDay(int prolepticYear, int dayOfYear)
从日光年和日间字段获取Hijrah日历系统中的当地日期。
|
HijrahEra |
eraOf(int eraValue)
根据数值创建年代时代对象。
|
List<Era> |
eras()
获取年表的时间列表。
|
String |
getCalendarType()
获取伊斯兰历法的日历类型。
|
String |
getId()
获取年表的ID。
|
boolean |
isLeapYear(long prolepticYear)
检查指定年份是否是闰年。
|
ChronoLocalDateTime<HijrahDate> |
localDateTime(TemporalAccessor temporal)
从另一个时间对象获取本年龄的本地日期时间。
|
int |
prolepticYear(Era era, int yearOfEra)
计算年龄和年龄的幼年时期。
|
ValueRange |
range(ChronoField field)
获取指定字段的有效值的范围。
|
HijrahDate |
resolveDate(Map<TemporalField,Long> fieldValues, ResolverStyle resolverStyle)
解析解析时解析为
ChronoField 值。
|
ChronoZonedDateTime<HijrahDate> |
zonedDateTime(Instant instant, ZoneId zone)
获得
ChronoZonedDateTime 在从这个年表
Instant 。
|
ChronoZonedDateTime<HijrahDate> |
zonedDateTime(TemporalAccessor temporal)
从另一个时间对象获得这个
ChronoZonedDateTime 中的ChronoZonedDateTime。
|
compareTo, equals, hashCode, toString
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
from, getDisplayName, period
public static final HijrahChronology INSTANCE
Chronology.getAvailableChronologies()
获得 。
public String getId()
该ID唯一标识Chronology
。 它可以用于查找Chronology
使用AbstractChronology.of(String)
。
getId
在接口
Chronology
getCalendarType()
public String getCalendarType()
日历类型是由Unicode区域设置数据标记语言(LDML)规范定义的标识符。 它可以用于查找Chronology
使用AbstractChronology.of(String)
。
getCalendarType
在界面
Chronology
getId()
public HijrahDate date(Era era, int yearOfEra, int month, int dayOfMonth)
date
在界面
Chronology
era
- Hijrah时代,不为空
yearOfEra
- 年代
month
- 年月
dayOfMonth
- 月的日子
DateTimeException
- 如果无法创建日期
ClassCastException
- 如果
era
不是
HijrahEra
public HijrahDate date(int prolepticYear, int month, int dayOfMonth)
date
在界面
Chronology
prolepticYear
- 幼稚年
month
- 年月
dayOfMonth
- 月的日子
DateTimeException
- 如果无法创建日期
public HijrahDate dateYearDay(Era era, int yearOfEra, int dayOfYear)
dateYearDay
在界面
Chronology
era
- Hijrah时代,不为空
yearOfEra
- 年代
dayOfYear
- 一年的一天
DateTimeException
- 如果无法创建日期
ClassCastException
- 如果
era
不是
HijrahEra
public HijrahDate dateYearDay(int prolepticYear, int dayOfYear)
dateYearDay
在接口
Chronology
prolepticYear
- 幼稚年
dayOfYear
- 一年的一天
DateTimeException
- 如果一年的价值超出了范围,或者如果一年中的年份无效
public HijrahDate dateEpochDay(long epochDay)
dateEpochDay
在界面
Chronology
epochDay
- 纪元日
DateTimeException
- 如果无法创建日期
public HijrahDate dateNow()
Chronology
复制
dateNow
在接口
Chronology
public HijrahDate dateNow(ZoneId zone)
Chronology
复制
dateNow
在接口
Chronology
zone
- 要使用的区域ID,不为空
public HijrahDate dateNow(Clock clock)
Chronology
复制
这将查询指定的时钟以获取当前日期 - 今天。 使用此方法可以使用备用时钟进行测试。 替代时钟可以使用dependency injection
引入 。
dateNow
在接口
Chronology
clock
- 要使用的时钟,不为空
public HijrahDate date(TemporalAccessor temporal)
Chronology
复制
这在这个时间表中基于指定的时间获得日期。 A TemporalAccessor
表示一个任意的日期和时间信息集,该工厂转换为ChronoLocalDate
一个实例。
转换通常使用EPOCH_DAY
字段,这是跨日历系统标准化的。
该方法中,功能接口的签名相匹配TemporalQuery
允许它被用作通过方法参考,查询aChronology::date
。
date
在界面
Chronology
temporal
- 要转换的时间对象,不为null
ChronoLocalDate.from(TemporalAccessor)
public ChronoLocalDateTime<HijrahDate> localDateTime(TemporalAccessor temporal)
Chronology
复制
这在这个时间表中基于指定的时间获得日期时间。 A TemporalAccessor
表示一个任意的日期和时间信息集,该工厂转换为ChronoLocalDateTime
一个实例。
转换提取并结合了时间对象的ChronoLocalDate
和LocalTime
。 允许实现执行优化,例如访问与相关对象相当的那些字段。 结果使用这个年表。
该方法中,功能接口的签名相匹配TemporalQuery
允许它被用作通过方法参考,查询aChronology::localDateTime
。
localDateTime
在接口
Chronology
temporal
- 要转换的时间对象,不为null
ChronoLocalDateTime.from(TemporalAccessor)
public ChronoZonedDateTime<HijrahDate> zonedDateTime(TemporalAccessor temporal)
Chronology
复制
ChronoZonedDateTime
中的一个ChronoZonedDateTime
。
根据指定的时间,在这个年表中获得一个分区的日期时间。 A TemporalAccessor
代表一个任意的日期和时间信息,这个工厂转换为ChronoZonedDateTime
一个实例。
转换将第一获得ZoneId
从时间对象,回落到一个ZoneOffset
如果必要的话。 然后,它会尝试获得Instant
,回落到ChronoLocalDateTime
,如果必要的。 结果将是ZoneId
或ZoneOffset
与Instant
或ChronoLocalDateTime
。 允许实现执行优化,例如访问与相关对象相当的那些字段。 结果使用这个年表。
该方法中,功能接口的签名相匹配TemporalQuery
允许它被用作通过方法参考,查询aChronology::zonedDateTime
。
zonedDateTime
在接口
Chronology
temporal
- 要转换的时间对象,不为null
ChronoZonedDateTime.from(TemporalAccessor)
public ChronoZonedDateTime<HijrahDate> zonedDateTime(Instant instant, ZoneId zone)
Chronology
复制
ChronoZonedDateTime
在从这个年表Instant
。
这将获得与指定的相同时间的分区日期时间。
zonedDateTime
在界面
Chronology
instant
- 即时创建日期时间,不为null
zone
- 时区,不为空
public boolean isLeapYear(long prolepticYear)
Chronology
复制
闰年是一个比正常长的一年。 确切的含义由年龄根据以下约束决定。
isLeapYear
在界面
Chronology
prolepticYear
- 检查年份,无法验证范围
public int prolepticYear(Era era, int yearOfEra)
Chronology
复制
这将时代与时代融为一体的年轻一代。
如果年表积极使用时代,例如JapaneseChronology
那么年代将在时代得到验证。 对于其他年表,验证是可选的。
prolepticYear
在界面
Chronology
era
- 正确类型为时代的时代,不为零
yearOfEra
- 年代的年代
public HijrahEra eraOf(int eraValue)
Chronology
复制
时代在概念上是时间线上最大的一个部门。 大多数日历系统具有将时间线划分为两个时代的单个时期。 然而,有些有多个时代,比如每个领导人统治的时代。 确切的含义由年龄根据以下约束决定。
1970-01-01使用的时代必须具有值1.后来的时代必须具有较高的值。 较早的时间必须具有较低的值。 每个年表必须参考枚举或类似的单身,以提供时代价值观。
该方法返回指定时代值的正确类型的单例时代。
eraOf
在接口
Chronology
eraValue
- 时代价值
public List<Era> eras()
Chronology
复制
大多数日历系统都有一个时代,其中一年有意义。 如果日历系统不支持时间的概念,则必须返回空列表。
eras
在界面
Chronology
public ValueRange range(ChronoField field)
Chronology
复制
所有字段可以表示为long
整数。 此方法返回描述该值的有效范围的对象。
请注意,结果仅描述最小和最大有效值,重要的是不要太多读取它们。 例如,可以在该范围内的值对该字段无效。
该方法将返回结果,无论年表是否支持该字段。
range
在界面
Chronology
field
- 获取范围的字段,不为null
public HijrahDate resolveDate(Map<TemporalField,Long> fieldValues, ResolverStyle resolverStyle)
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
存在,并且模式是聪明或宽松的,那么假设最后一个可用的时代。 在严格的模式下,没有假设时代, YEAR_OF_ERA
保持不变。 如果只有ERA
存在,那么它保持不变。 YEAR
, MONTH_OF_YEAR
和DAY_OF_MONTH
-如果所有三个都存在,那么它们被组合成一个日期。 在所有三种模式下, YEAR
都经过验证。 如果模式是聪明或严格的,则验证月和日。 如果模式宽松,则以相当于在请求年份的第一个月的第一天创建日期的方式组合日期,然后将月份中的差额加上差异天数。 如果模式是聪明的,并且月的日期大于年月的最大值,则月的日期被调整到最后一个月。 如果模式严格,则三个字段必须形成有效的日期。 YEAR
和DAY_OF_YEAR
- 如果两者都存在,则它们被组合以形成日期。 在所有三种模式下, YEAR
都经过验证。 如果模式宽松,那么日期将以相当于在请求年的第一天创建日期的方式组合,然后加上差异。 如果模式是聪明或严格的,那么这两个字段必须形成一个有效的日期。 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
周在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
- 可以更新的值的字段映射,不为null
resolverStyle
- 请求的解析类型,不为null