- 所有超接口:
-
Comparable<Chronology>
- 所有已知实现类:
-
AbstractChronology
,HijrahChronology
,IsoChronology
,JapaneseChronology
,MinguoChronology
,ThaiBuddhistChronology
主要的日期和时间API建立在ISO日历系统上。年表在幕后运行,以表示日历系统的一般概念。例如,日本、民国、泰国佛教等。
大多数其他日历系统也基于年、月和日的共享概念,与地球绕太阳、月亮绕地球的周期相关联。这些共享概念由ChronoField
定义,并可供任何Chronology
实现使用:
LocalDate isoDate = ... ThaiBuddhistDate thaiDate = ... int isoYear = isoDate.get(ChronoField.YEAR); int thaiYear = thaiDate.get(ChronoField.YEAR);如所示,尽管日期对象位于不同的日历系统中,由不同的
Chronology
实例表示,但两者都可以使用ChronoField
上的相同常量进行查询。有关此的详细讨论,请参见ChronoLocalDate
。一般来说,建议使用已知的基于ISO的LocalDate
,而不是ChronoLocalDate
。
虽然Chronology
对象通常使用ChronoField
,并基于一个日期的时代、年代、月份和日期模型,但这不是必需的。一个Chronology
实例可以表示完全不同类型的日历系统,比如玛雅日历。
在实际操作中,Chronology
实例也充当工厂。of(String)
方法允许通过标识符查找实例,而ofLocale(Locale)
方法允许通过区域设置查找。
Chronology
实例提供了一组方法来创建ChronoLocalDate
实例。日期类用于操作特定日期。
dateNow()
dateNow(clock)
dateNow(zone)
date(yearProleptic, month, day)
date(era, yearOfEra, month, day)
dateYearDay(yearProleptic, dayOfYear)
dateYearDay(era, yearOfEra, dayOfYear)
date(TemporalAccessor)
添加新日历
应用程序可以扩展可用的年表集。添加新的日历系统需要编写Chronology
、ChronoLocalDate
和Era
的实现。与日历系统相关的大部分逻辑将在ChronoLocalDate
实现中。Chronology
实现充当工厂。
为了允许发现额外的年表,使用了ServiceLoader
。必须向META-INF/services
目录添加一个文件,名称为'java.time.chrono.Chronology',列出实现类。有关服务加载的更多详细信息,请参见ServiceLoader。通过id或calendarType查找时,首先找到系统提供的日历,然后是应用程序提供的日历。
每个年表必须定义一个在系统内唯一的年表ID。如果年表代表由CLDR规范定义的日历系统,则日历类型是CLDR类型的串联,如果适用,则是CLDR变体。
- 实现要求:
- 必须小心实现此接口,以确保其他类能够正确运行。所有可实例化的实现必须是final、不可变且线程安全的。子类应尽可能可序列化。
- 自 JDK 版本:
- 1.8
-
Method Summary
Modifier and TypeMethodDescriptionint
compareTo
(Chronology other) 比较此年表与另一个年表。date
(int prolepticYear, int month, int dayOfMonth) 从指定的公元年、年份和月份字段获取此年表中的本地日期。default ChronoLocalDate
从指定的时代、年份、月份和日期字段获取此年表中的本地日期。date
(TemporalAccessor temporal) 从另一个时间对象获取此年表中的本地日期。dateEpochDay
(long epochDay) 从纪元日获取此年表中的本地日期。default ChronoLocalDate
dateNow()
从默认时区的系统时钟获取此年表中的当前本地日期。default ChronoLocalDate
从指定时钟获取此年表中的当前本地日期。default ChronoLocalDate
从指定时区的系统时钟获取此年表中的当前本地日期。dateYearDay
(int prolepticYear, int dayOfYear) 从指定的公元年和年中的日期字段获取此年表中的本地日期。default ChronoLocalDate
dateYearDay
(Era era, int yearOfEra, int dayOfYear) 从指定的时代、年代和年中的日期字段获取此年表中的本地日期。default long
epochSecond
(int prolepticYear, int month, int dayOfMonth, int hour, int minute, int second, ZoneOffset zoneOffset) 获取从1970-01-01T00:00:00Z时代开始的秒数。default long
epochSecond
(Era era, int yearOfEra, int month, int dayOfMonth, int hour, int minute, int second, ZoneOffset zoneOffset) 获取从1970-01-01T00:00:00Z时代开始的秒数。boolean
检查此年表是否等于另一个年表。eraOf
(int eraValue) 从数值获取年表时代对象。eras()
获取年表的时代列表。static Chronology
from
(TemporalAccessor temporal) 从时间对象获取Chronology
的实例。static Set
<Chronology> 返回可用的年表。获取日历系统的日历类型。default String
getDisplayName
(TextStyle style, Locale locale) 获取此年表的文本表示。getId()
获取年表的ID。int
hashCode()
此年表的哈希码。default boolean
检查此年表是否基于ISO。boolean
isLeapYear
(long prolepticYear) 检查指定年份是否为闰年。default ChronoLocalDateTime
<? extends ChronoLocalDate> localDateTime
(TemporalAccessor temporal) 从另一个时间对象获取此年表中的本地日期时间。static Chronology
从年表ID或日历系统类型获取Chronology
的实例。static Chronology
从区域设置获取Chronology
的实例。default ChronoPeriod
period
(int years, int months, int days) 基于年、月和日计算此年表的期间。int
prolepticYear
(Era era, int yearOfEra) 根据时代和年代计算公元年。range
(ChronoField field) 获取指定字段的有效值范围。resolveDate
(Map<TemporalField, Long> fieldValues, ResolverStyle resolverStyle) 在解析期间将解析的ChronoField
值解析为日期。toString()
将此年表输出为String
。default ChronoZonedDateTime
<? extends ChronoLocalDate> zonedDateTime
(Instant instant, ZoneId zone) 从Instant
获取此年表中的ChronoZonedDateTime
。default ChronoZonedDateTime
<? extends ChronoLocalDate> zonedDateTime
(TemporalAccessor temporal) 从另一个时间对象获取此年表中的ChronoZonedDateTime
。
-
Method Details
-
from
从时间对象获取Chronology
的实例。此方法基于指定的时间获取年表。一个
TemporalAccessor
表示一组任意的日期和时间信息,此工厂将其转换为Chronology
的实例。转换将使用
TemporalQueries.chronology()
获取年表。如果指定的时间对象没有年表,则返回IsoChronology
。此方法与函数接口
TemporalQuery
的签名匹配,允许通过方法引用Chronology::from
来使用它作为查询。- 参数:
-
temporal
- 要转换的时间,不能为空 - 返回:
- 年表,不能为空
- 抛出:
-
DateTimeException
- 如果无法转换为Chronology
-
ofLocale
Obtains an instance ofChronology
from a locale.This returns a
Chronology
based on the specified locale, typically returningIsoChronology
. Other calendar systems are only returned if they are explicitly selected within the locale.The
Locale
class provide access to a range of information useful for localizing an application. This includes the language and region, such as "en-GB" for English as used in Great Britain.The
Locale
class also supports an extension mechanism that can be used to identify a calendar system. The mechanism is a form of key-value pairs, where the calendar system has the key "ca". For example, the locale "en-JP-u-ca-japanese" represents the English language as used in Japan with the Japanese calendar system.This method finds the desired calendar system in a manner equivalent to passing "ca" to
Locale.getUnicodeLocaleType(String)
. If the "ca" key is not present, thenIsoChronology
is returned.Note that the behavior of this method differs from the older
Calendar.getInstance(Locale)
method. If that method receives a locale of "th_TH" it will returnBuddhistCalendar
. By contrast, this method will returnIsoChronology
. Passing the locale "th-TH-u-ca-buddhist" into either method will result in the Thai Buddhist calendar system and is therefore the recommended approach going forward for Thai calendar system localization.A similar, but simpler, situation occurs for the Japanese calendar system. The locale "jp_JP_JP" has previously been used to access the calendar. However, unlike the Thai locale, "ja_JP_JP" is automatically converted by
Locale
to the modern and recommended form of "ja-JP-u-ca-japanese". Thus, there is no difference in behavior between this method andCalendar#getInstance(Locale)
.- Parameters:
-
locale
- the locale to use to obtain the calendar system, not null - Returns:
- the calendar system associated with the locale, not null
- Throws:
-
DateTimeException
- if the locale-specified calendar cannot be found
-
of
Obtains an instance ofChronology
from a chronology ID or calendar system type.This returns a chronology based on either the ID or the type. The
chronology ID
uniquely identifies the chronology. Thecalendar system type
is defined by the CLDR specification.The chronology may be a system chronology or a chronology provided by the application via ServiceLoader configuration.
Since some calendars can be customized, the ID or type typically refers to the default customization. For example, the Gregorian calendar can have multiple cutover dates from the Julian, but the lookup only provides the default cutover date.
- Parameters:
-
id
- the chronology ID or calendar system type, not null - Returns:
- the chronology with the identifier requested, not null
- Throws:
-
DateTimeException
- if the chronology cannot be found
-
getAvailableChronologies
Returns the available chronologies.Each returned
Chronology
is available for use in the system. The set of chronologies includes the system chronologies and any chronologies provided by the application via ServiceLoader configuration.- Returns:
- the independent, modifiable set of the available chronology IDs, not null
-
getId
String getId()Gets the ID of the chronology.The ID uniquely identifies the
Chronology
. It can be used to lookup theChronology
usingof(String)
.- Returns:
- the chronology ID, not null
- See Also:
-
getCalendarType
String getCalendarType()Gets the calendar type of the calendar system.The calendar type is an identifier defined by the CLDR and Unicode Locale Data Markup Language (LDML) specifications to uniquely identify a calendar. The
getCalendarType
is the concatenation of the CLDR calendar type and the variant, if applicable, is appended separated by "-". The calendar type is used to lookup theChronology
usingof(String)
.- Returns:
- the calendar system type, null if the calendar is not defined by CLDR/LDML
- See Also:
-
date
Obtains a local date in this chronology from the era, year-of-era, month-of-year and day-of-month fields.- Implementation Requirements:
-
The default implementation combines the era and year-of-era into a proleptic year before calling
date(int, int, int)
. - Parameters:
-
era
- the era of the correct type for the chronology, not null -
yearOfEra
- the chronology year-of-era -
month
- the chronology month-of-year -
dayOfMonth
- the chronology day-of-month - Returns:
- the local date in this chronology, not null
- Throws:
-
DateTimeException
- if unable to create the date -
ClassCastException
- if theera
is not of the correct type for the chronology
-
date
Obtains a local date in this chronology from the proleptic-year, month-of-year and day-of-month fields.- Parameters:
-
prolepticYear
- the chronology proleptic-year -
month
- the chronology month-of-year -
dayOfMonth
- the chronology day-of-month - Returns:
- the local date in this chronology, not null
- Throws:
-
DateTimeException
- if unable to create the date
-
dateYearDay
Obtains a local date in this chronology from the era, year-of-era and day-of-year fields.- Implementation Requirements:
-
The default implementation combines the era and year-of-era into a proleptic year before calling
dateYearDay(int, int)
. - Parameters:
-
era
- the era of the correct type for the chronology, not null -
yearOfEra
- the chronology year-of-era -
dayOfYear
- the chronology day-of-year - Returns:
- the local date in this chronology, not null
- Throws:
-
DateTimeException
- if unable to create the date -
ClassCastException
- if theera
is not of the correct type for the chronology
-
dateYearDay
Obtains a local date in this chronology from the proleptic-year and day-of-year fields.- Parameters:
-
prolepticYear
- the chronology proleptic-year -
dayOfYear
- the chronology day-of-year - Returns:
- the local date in this chronology, not null
- Throws:
-
DateTimeException
- if unable to create the date
-
dateEpochDay
Obtains a local date in this chronology from the epoch-day.The definition of
EPOCH_DAY
is the same for all calendar systems, thus it can be used for conversion.- Parameters:
-
epochDay
- the epoch day - Returns:
- the local date in this chronology, not null
- Throws:
-
DateTimeException
- if unable to create the date
-
dateNow
Obtains the current local date in this chronology from the system clock in the default time-zone.This will query the
system clock
in the default time-zone to obtain the current date.Using this method will prevent the ability to use an alternate clock for testing because the clock is hard-coded.
- Implementation Requirements:
-
The default implementation invokes
dateNow(Clock)
. - Returns:
- the current local date using the system clock and default time-zone, not null
- Throws:
-
DateTimeException
- if unable to create the date
-
dateNow
Obtains the current local date in this chronology from the system clock in the specified time-zone.This will query the
system clock
to obtain the current date. Specifying the time-zone avoids dependence on the default time-zone.Using this method will prevent the ability to use an alternate clock for testing because the clock is hard-coded.
- Implementation Requirements:
-
The default implementation invokes
dateNow(Clock)
. - Parameters:
-
zone
- the zone ID to use, not null - Returns:
- the current local date using the system clock, not null
- Throws:
-
DateTimeException
- if unable to create the date
-
dateNow
Obtains the current local date in this chronology from the specified clock.This will query the specified clock to obtain the current date - today. Using this method allows the use of an alternate clock for testing. The alternate clock may be introduced using
dependency injection
.- 实现要求:
-
默认实现调用
date(TemporalAccessor)
。 - 参数:
-
clock
- 要使用的时钟,不能为空 - 返回:
- 当前本地日期,不能为空
- 抛出:
-
DateTimeException
- 如果无法创建日期
-
date
从另一个时间对象中获取此年表中的本地日期。根据指定的时间获取此年表中的日期。
TemporalAccessor
表示一组任意的日期和时间信息,此工厂将其转换为ChronoLocalDate
的实例。转换通常使用标准化的跨日字段
EPOCH_DAY
,该字段在日历系统中是标准化的。此方法与函数接口
TemporalQuery
的签名匹配,允许通过方法引用aChronology::date
使用它作为查询。- 参数:
-
temporal
- 要转换的时间对象,不能为空 - 返回:
- 此年表中的本地日期,不能为空
- 抛出:
-
DateTimeException
- 如果无法创建日期 - 参见:
-
localDateTime
从另一个时间对象中获取此年表中的本地日期时间。根据指定的时间获取此年表中的日期时间。
TemporalAccessor
表示一组任意的日期和时间信息,此工厂将其转换为ChronoLocalDateTime
的实例。转换从时间对象中提取并组合
ChronoLocalDate
和LocalTime
。 实现允许执行优化,例如访问等效于相关对象的字段。 结果使用此年表。此方法与函数接口
TemporalQuery
的签名匹配,允许通过方法引用aChronology::localDateTime
使用它作为查询。- 参数:
-
temporal
- 要转换的时间对象,不能为空 - 返回:
- 此年表中的本地日期时间,不能为空
- 抛出:
-
DateTimeException
- 如果无法创建日期时间 - 参见:
-
zonedDateTime
从另一个时间对象中获取此年表中的ChronoZonedDateTime
。根据指定的时间获取此年表中的分区日期时间。
TemporalAccessor
表示一组任意的日期和时间信息,此工厂将其转换为ChronoZonedDateTime
的实例。转换将首先从时间对象中获取
ZoneId
,必要时回退到ZoneOffset
。 然后尝试获取Instant
,必要时回退到ChronoLocalDateTime
。 结果将是ZoneId
或ZoneOffset
与Instant
或ChronoLocalDateTime
的组合。 实现允许执行优化,例如访问等效于相关对象的字段。 结果使用此年表。此方法与函数接口
TemporalQuery
的签名匹配,允许通过方法引用aChronology::zonedDateTime
使用它作为查询。- 参数:
-
temporal
- 要转换的时间对象,不能为空 - 返回:
- 此年表中的分区日期时间,不能为空
- 抛出:
-
DateTimeException
- 如果无法创建日期时间 - 参见:
-
zonedDateTime
从Instant
中获取此年表中的ChronoZonedDateTime
。获取具有与指定时间相同的瞬时的分区日期时间。
- 参数:
-
instant
- 从中创建日期时间的瞬时,不能为空 -
zone
- 时区,不能为空 - 返回:
- 分区日期时间,不能为空
- 抛出:
-
DateTimeException
- 如果结果超出支持的范围
-
isLeapYear
boolean isLeapYear(long prolepticYear) 检查指定的年份是否为闰年。闰年是比正常年份长的一年。确切含义由年表根据以下约束确定。
- 闰年必须意味着年份长度比非闰年长。
- 不支持年份概念的年表必须返回 false。
- 对于年表的有效年份范围内的所有年份,必须返回正确的结果。
在有效年份范围之外,实现可以自由返回最佳猜测或 false。即使年份超出有效年份范围,实现也不得抛出异常。
- 参数:
-
prolepticYear
- 要检查的纪年,未验证范围 - 返回:
- 如果年份是闰年,则为 true
-
prolepticYear
根据纪元和纪元年计算纪年。将纪元和纪元年合并为单个纪年字段。
如果年表积极使用纪元,例如
JapaneseChronology
,则将根据纪元验证纪元年。对于其他年表,验证是可选的。- 参数:
-
era
- 适合年表的纪元,不能为空 -
yearOfEra
- 年表纪元年 - 返回:
- 纪年
- 抛出:
-
DateTimeException
- 如果无法转换为纪年,例如如果年份对于纪元无效 -
ClassCastException
- 如果era
不是适合年表的正确类型
-
eraOf
从数字值创建年表纪元对象。纪元在概念上是时间线的最大划分。大多数日历系统有一个单一的时代将时间线分为两个时代。但是,有些日历系统有多个时代,例如每位领导人的统治一个时代。确切含义由年表根据以下约束确定。
在 1970-01-01 使用的时代必须具有值 1。后续时代必须具有依次更高的值。较早的时代必须具有依次更低的值。每个年表必须引用一个枚举或类似的单例以提供时代值。
此方法返回指定时代值的正确类型的单例时代。
- 参数:
-
eraValue
- 时代值 - 返回:
- 日历系统时代,不能为空
- 抛出:
-
DateTimeException
- 如果无法创建时代
-
eras
获取年表的时代列表。大多数日历系统有一个时代,其中年份具有意义。如果日历系统不支持时代概念,则必须返回空列表。
- 返回:
- 年表的时代列表,可能是不可变的,不能为空
-
range
获取指定字段的有效值范围。所有字段都可以表示为
long
整数。此方法返回描述该值的有效范围的对象。请注意,结果仅描述最小和最大有效值,重要的是不要读取太多内容。例如,范围内可能存在对于字段无效的值。
无论年表是否支持该字段,此方法都将返回结果。
- 参数:
-
field
- 要获取范围的字段,不能为空 - 返回:
- 字段的有效值范围,不能为空
- 抛出:
-
DateTimeException
- 如果无法获取字段的范围
-
getDisplayName
获取此年表的文本表示。返回用于标识年表的文本名称,适合向用户展示。参数控制返回文本的样式和区域设置。
- 实现要求:
- 默认实现的行为就像使用格式化程序格式化年表文本名称一样。
- 参数:
-
style
- 所需文本的样式,不能为空 -
locale
- 要使用的区域设置,不能为空 - 返回:
- 年表的文本值,不能为空
-
resolveDate
将解析的ChronoField
值解析为解析期间的日期。大多数
TemporalField
实现使用字段的解析方法进行解析。相比之下,ChronoField
类定义的字段仅相对于年表具有意义。因此,在特定年表的上下文中,在此处解析ChronoField
日期字段。提供了默认实现,解释了典型的解析行为,提供在
AbstractChronology
中。- 参数:
-
fieldValues
- 字段到值的映射,可以更新,不能为空 -
resolverStyle
- 请求的解析类型,不能为空 - 返回:
- 解析后的日期,如果信息不足无法创建日期则返回null
- 抛出:
-
DateTimeException
- 如果无法解析日期,通常是因为输入数据冲突
-
period
基于年、月和日获取此年表的期间。使用指定的年、月和日返回与此年表相关联的期间。所有提供的年表都使用基于年、月和日的期间,但是
ChronoPeriod
API允许使用其他单位表示期间。- 实现要求:
-
默认实现返回适用于大多数日历系统的实现类。它仅基于这三个单位。规范化、加法和减法从
range(ChronoField)
中获取一年中的月数。如果一年中的月数固定,则加法、减法和规范化的计算方法略有不同。如果实现的是不基于年、月和日的不寻常日历系统,或者您想要直接控制,则必须直接实现
ChronoPeriod
接口。返回的期间是不可变且线程安全的。
- 参数:
-
years
- 年数,可以为负数 -
months
- 月数,可以为负数 -
days
- 天数,可以为负数 - 返回:
- 以此年表为单位的期间,不能为空
-
epochSecond
default long epochSecond(int prolepticYear, int month, int dayOfMonth, int hour, int minute, int second, ZoneOffset zoneOffset) 获取从1970-01-01T00:00:00Z时代开始的秒数。秒数是使用历元年、月、日、小时、分钟、秒和区偏移计算的。
- 参数:
-
prolepticYear
- 年表历元年 -
month
- 年表年中的月份 -
dayOfMonth
- 年表月中的日期 -
hour
- 小时,从0到23 -
minute
- 分钟,从0到59 -
second
- 秒,从0到59 -
zoneOffset
- 区偏移,不能为空 - 返回:
- 相对于1970-01-01T00:00:00Z的秒数,可以为负数
- 抛出:
-
DateTimeException
- 如果任何值超出范围 - 自:
- 9
-
epochSecond
default long epochSecond(Era era, int yearOfEra, int month, int dayOfMonth, int hour, int minute, int second, ZoneOffset zoneOffset) 获取从1970-01-01T00:00:00Z时代开始的秒数。秒数是使用纪元、纪元年、月、日、小时、分钟、秒和区偏移计算的。
- 参数:
-
era
- 适合该年表的纪元,不能为空 -
yearOfEra
- 年表纪元年 -
month
- 年表年中的月份 -
dayOfMonth
- 年表月中的日期 -
hour
- 小时,从0到23 -
minute
- 分钟,从0到59 -
second
- 秒,从0到59 -
zoneOffset
- 区偏移,不能为空 - 返回:
- 相对于1970-01-01T00:00:00Z的秒数,可以为负数
- 抛出:
-
DateTimeException
- 如果任何值超出范围 - 自:
- 9
-
isIsoBased
default boolean isIsoBased()检查此年表是否基于ISO。基于ISO的年表具有与
ISO年表
相同的基本结构,即年表具有相同数量的月份,每个月的天数,以及一年中的日期和闰年与ISO年表相同。它还支持ISO年表的基于周的年份概念。例如,Minguo
、ThaiBuddhist
和Japanese
年表都是基于ISO的。- 实现要求:
-
默认实现返回
false
。 - 返回:
-
仅当此年表支持
IsoFields
的所有字段时返回true
。否则返回false
。 - 自:
- 19
- 参见:
-
compareTo
将此年表与另一个年表进行比较。比较顺序首先按年表ID字符串,然后按子类特定的任何其他信息。它符合
Comparable
定义的"与equals一致"。- 指定者:
-
compareTo
在接口Comparable<Chronology>
- 参数:
-
other
- 要比较的另一个年表,不能为空 - 返回:
-
比较器值,即将此ID字符串与
other
的ID字符串进行比较,除非ID字符串相等且年表使用其他信息区分实例
-
equals
检查此年表是否等于另一个年表。比较基于对象的整个状态。
-
hashCode
int hashCode()此年表的哈希码。哈希码应基于对象的整个状态。
-
toString
String toString()将此年表输出为String
。格式应包括对象的整个状态。
-