public interface Chronology extends Comparable<Chronology>
主要的日期和时间API建立在ISO日历系统上。 年表在幕后操作,代表日历系统的一般概念。 例如,日本,曼谷,泰国佛教徒等。
大多数其他日历系统还可以按照与太阳周围的地球以及地球周围的月球和日子的共同概念进行操作。 这些共享概念由ChronoField
定义, 可供任何Chronology
实现使用:
LocalDate isoDate = ...
ThaiBuddhistDate thaiDate = ...
int isoYear = isoDate.get(ChronoField.YEAR);
int thaiYear = thaiDate.get(ChronoField.YEAR);
如图所示,虽然日期对象在不同的日历系统中,由不同的Chronology Chronology
表示,但可以使用相同的常数在ChronoField
上进行查询。
有关这方面的含义的全面讨论,请参阅ChronoLocalDate
。
一般来说,建议是使用已知的基于ISO的LocalDate
而不是ChronoLocalDate
。
虽然Chronology
对象通常使用ChronoField
,并且基于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变体,
Modifier and Type | Method and Description |
---|---|
int |
compareTo(Chronology other)
将这个年表与另一个年表进行比较。
|
default ChronoLocalDate |
date(Era era, int yearOfEra, int month, int dayOfMonth)
从这个时代,年龄,月份和月份的时代获得这个年表的当地日期。
|
ChronoLocalDate |
date(int prolepticYear, int month, int dayOfMonth)
从年龄,月份和月份月份获取本年度的年表。
|
ChronoLocalDate |
date(TemporalAccessor temporal)
从另一个时间对象获取本年龄的本地日期。
|
ChronoLocalDate |
dateEpochDay(long epochDay)
从这个时代的时代获得当地的日期。
|
default ChronoLocalDate |
dateNow()
从默认时区的系统时钟获取此时间顺序中的当前本地日期。
|
default ChronoLocalDate |
dateNow(Clock clock)
从指定的时钟获取本年龄的当前本地日期。
|
default ChronoLocalDate |
dateNow(ZoneId zone)
从指定时区的系统时钟获取此时间顺序中的当前本地日期。
|
default ChronoLocalDate |
dateYearDay(Era era, int yearOfEra, int dayOfYear)
从这个时代,年龄和时代的年代领域获得这个年表的当地日期。
|
ChronoLocalDate |
dateYearDay(int prolepticYear, int dayOfYear)
在这个年龄和年龄段的年龄中获得当地的日期。
|
boolean |
equals(Object obj)
检查这个年表是否等于另一个年表。
|
Era |
eraOf(int eraValue)
根据数值创建年代时代对象。
|
List<Era> |
eras()
获取年表的时间列表。
|
static Chronology |
from(TemporalAccessor temporal)
从时间对象获取一个
Chronology 的实例。
|
static Set<Chronology> |
getAvailableChronologies()
返回可用的年表。
|
String |
getCalendarType()
获取日历系统的日历类型。
|
default String |
getDisplayName(TextStyle style, Locale locale)
获取这个年表的文本表示。
|
String |
getId()
获取年表的ID。
|
int |
hashCode()
这个年表的哈希码。
|
boolean |
isLeapYear(long prolepticYear)
检查指定年份是否是闰年。
|
default ChronoLocalDateTime<? extends ChronoLocalDate> |
localDateTime(TemporalAccessor temporal)
从另一个时间对象获取本年龄的本地日期时间。
|
static Chronology |
of(String id)
从时间序列ID或日历系统类型获取一个
Chronology 的实例。
|
static Chronology |
ofLocale(Locale locale)
从一个地区获取一个
Chronology 的实例。
|
default ChronoPeriod |
period(int years, int months, int days)
根据几年,几个月和几天的时间表获得一段时间。
|
int |
prolepticYear(Era era, int yearOfEra)
计算年龄和年龄的幼年时期。
|
ValueRange |
range(ChronoField field)
获取指定字段的有效值的范围。
|
ChronoLocalDate |
resolveDate(Map<TemporalField,Long> fieldValues, ResolverStyle resolverStyle)
解析解析时解析为
ChronoField 值。
|
String |
toString()
输出这个年表为
String 。
|
default ChronoZonedDateTime<? extends ChronoLocalDate> |
zonedDateTime(Instant instant, ZoneId zone)
获得
ChronoZonedDateTime 在从这个年表
Instant 。
|
default ChronoZonedDateTime<? extends ChronoLocalDate> |
zonedDateTime(TemporalAccessor temporal)
在另一个时间对象的
ChronoZonedDateTime 中获得一个
ChronoZonedDateTime 。
|
static Chronology from(TemporalAccessor temporal)
Chronology
的实例。
这获得了基于指定时间的年表。 A TemporalAccessor
表示一个任意的日期和时间信息集,该工厂转换为Chronology
一个实例。
转换将使用TemporalQueries.chronology()
获取年表 。 如果指定的时间对象不具有时间顺序,则返回IsoChronology
。
该方法中,功能接口的签名相匹配TemporalQuery
允许它在通过方法参考,查询中使用Chronology::from
。
temporal
- 时间转换,不为空
DateTimeException
- 如果无法转换为
Chronology
static Chronology ofLocale(Locale locale)
Chronology
的实例。
这将基于指定的区域设置返回Chronology
,通常返回IsoChronology
。 只有在区域设置中明确选择其他日历系统才会返回。
Locale
类提供了对本地化应用程序有用的一系列信息的访问。 这包括英语在英国所使用的语言和地区,例如“en-GB”。
Locale
类还支持一种可用于识别日历系统的扩展机制。 机制是键值对的一种形式,其中日历系统具有键“ca”。 例如,“en-JP-u-ca-japanese”的区域代表日本用日语日历系统使用的英文。
该方法以相当于通过“ca”到Locale.getUnicodeLocaleType(String)
的方式找到所需的日历系统。 如果“ca”键不存在,则返回IsoChronology
。
请注意,此方法的行为与较旧的Calendar.getInstance(Locale)
方法不同。 如果该方法收到“th_TH”的区域设置,它将返回BuddhistCalendar
。 相反,此方法将返回IsoChronology
。 将该地区“th-TH-u-ca-buddhist”传递到任一方法将导致泰国佛教日历系统,因此是泰国日历系统本地化的推荐方法。
对于日本的日历系统来说,发生类似但更简单的情况。 以前已使用区域设置“jp_JP_JP”访问日历。 然而,与泰国地区不同,“ja_JP_JP” Locale
转换为现代和推荐的“ja-JP-u-ca-japanese”形式,由Locale
转换。 因此,此方法与Calendar#getInstance(Locale)
之间的行为没有Calendar#getInstance(Locale)
。
locale
- 用于获取日历系统的区域设置,不为null
DateTimeException
- 如果
DateTimeException
区域设置指定的日历
static Chronology of(String id)
Chronology
的实例。
这将返回基于ID或类型的年表。 chronology ID
唯一标识年表。 calendar system type
由CLDR规范定义。
年表可能是由应用程序通过ServiceLoader配置提供的系统年表或年表。
由于某些日历可以自定义,因此ID或类型通常指默认的定制。 例如,公历可以使用Julian的多个切换日期,但查找只提供默认切换日期。
id
- 年表ID或日历系统类型,不为空
DateTimeException
- 如果不能找到年表
static Set<Chronology> getAvailableChronologies()
每个返回的Chronology
可用于系统。 一组年表包括系统年表和应用程序通过ServiceLoader配置提供的任何年表。
String getId()
该ID唯一标识Chronology
。 它可以用于查找Chronology
使用of(String)
。
getCalendarType()
String getCalendarType()
日历类型是由CLDR和Unicode区域设置数据标记语言(LDML)规范定义的标识符,用于唯一标识日历。 getCalendarType
是CLDR日历类型和变体的连接(如果适用)以“ - ”分隔。 日历类型用于查找Chronology
使用of(String)
。
getId()
default ChronoLocalDate date(Era era, int yearOfEra, int month, int dayOfMonth)
date(int, int, int)
之前成为一个激动人心的年份。
era
- 时代的正确类型为年表,不为空
yearOfEra
- 年代的年代
month
- 年表的年份
dayOfMonth
- 按时间顺序排列的月份
DateTimeException
- 如果无法创建日期
ClassCastException
- 如果
era
不是正确的年表类型
ChronoLocalDate date(int prolepticYear, int month, int dayOfMonth)
prolepticYear
- 年表学年
month
- 年表的年份
dayOfMonth
- 年表日期
DateTimeException
- 如果无法创建日期
default ChronoLocalDate dateYearDay(Era era, int yearOfEra, int dayOfYear)
dateYearDay(int, int)
之前成为一个激动人心的年份。
era
- 时代的正确类型为年表,不为空
yearOfEra
- 年代的年代
dayOfYear
- 年表日期
DateTimeException
- 如果无法创建日期
ClassCastException
- 如果
era
不是正确的年表类型
ChronoLocalDate dateYearDay(int prolepticYear, int dayOfYear)
prolepticYear
- 年表学年
dayOfYear
- 年表日期
DateTimeException
- 如果无法创建日期
ChronoLocalDate dateEpochDay(long epochDay)
EPOCH_DAY
的定义对于所有日历系统是相同的,因此可以用于转换。
epochDay
- 纪元日
DateTimeException
- 如果无法创建日期
default ChronoLocalDate dateNow()
dateNow(Clock)
。
DateTimeException
- 如果无法创建日期
default ChronoLocalDate dateNow(ZoneId zone)
dateNow(Clock)
。
zone
- 要使用的区域ID,不为空
DateTimeException
- 如果无法创建日期
default ChronoLocalDate dateNow(Clock clock)
这将查询指定的时钟以获取当前日期 - 今天。 使用此方法可以使用备用时钟进行测试。 替代时钟可以使用dependency injection
引入 。
date(TemporalAccessor)
)}。
clock
- 要使用的时钟,不为空
DateTimeException
- 如果无法创建日期
ChronoLocalDate date(TemporalAccessor temporal)
这在这个时间表中基于指定的时间获得日期。 A TemporalAccessor
表示日期和时间信息的任意集合,该工厂转换为ChronoLocalDate
一个实例。
转换通常使用EPOCH_DAY
字段,这是跨日历系统标准化的。
该方法中,功能接口的签名相匹配TemporalQuery
允许它被用作通过方法参考,查询aChronology::date
。
temporal
- 要转换的时间对象,不为null
DateTimeException
- 如果无法创建日期
ChronoLocalDate.from(TemporalAccessor)
default ChronoLocalDateTime<? extends ChronoLocalDate> localDateTime(TemporalAccessor temporal)
这在这个时间表中基于指定的时间获得日期时间。 A TemporalAccessor
表示日期和时间信息的任意集合,该工厂将其转换为ChronoLocalDateTime
一个实例。
转换提取并结合了时间对象的ChronoLocalDate
和LocalTime
。 允许实现执行优化,例如访问与相关对象相当的那些字段。 结果使用这个年表。
该方法中,功能接口的签名相匹配TemporalQuery
允许它被用作通过方法参考,查询aChronology::localDateTime
。
temporal
- 要转换的时间对象,不为null
DateTimeException
- 如果无法创建日期时间
ChronoLocalDateTime.from(TemporalAccessor)
default ChronoZonedDateTime<? extends ChronoLocalDate> zonedDateTime(TemporalAccessor temporal)
ChronoZonedDateTime
中获得一个ChronoZonedDateTime
。
根据指定的时间,在这个年表中获得一个分区的日期时间。 A TemporalAccessor
表示日期和时间信息的任意集合,该工厂将其转换为ChronoZonedDateTime
一个实例。
转换将第一获得ZoneId
从时间对象,回落到一个ZoneOffset
如果必要的话。 然后,它会尝试获得Instant
,回落到ChronoLocalDateTime
,如果必要的。 结果将是ZoneId
或ZoneOffset
与Instant
或ChronoLocalDateTime
。 允许实现执行优化,例如访问与相关对象相当的那些字段。 结果使用这个年表。
该方法中,功能接口的签名相匹配TemporalQuery
允许它被用作通过方法参考,查询aChronology::zonedDateTime
。
temporal
- 要转换的时间对象,不为null
DateTimeException
- 如果无法创建日期时间
ChronoZonedDateTime.from(TemporalAccessor)
default ChronoZonedDateTime<? extends ChronoLocalDate> zonedDateTime(Instant instant, ZoneId zone)
ChronoZonedDateTime
在从这个年表Instant
。
这将获得与指定的相同时间的分区日期时间。
instant
- 即时创建日期时间,不为null
zone
- 时区,不为空
DateTimeException
- 如果结果超出了支持的范围
boolean isLeapYear(long prolepticYear)
闰年是一个比正常长的一年。 确切的含义由年龄根据以下约束决定。
prolepticYear
- 检查年份,无法验证范围
int prolepticYear(Era era, int yearOfEra)
这将时代与时代融为一体的年轻一代。
如果年表积极使用时代,例如JapaneseChronology
那么年代将在时代得到验证。 对于其他年表,验证是可选的。
era
- 正确类型为时代的时代,不为零
yearOfEra
- 年代的年代
DateTimeException
- 如果无法转变成一个激动人心的年份,比如那一年对于这个时代是无效的
ClassCastException
- 如果
era
不是正确的年表类型
Era eraOf(int eraValue)
时代在概念上是时间线上最大的一个部门。 大多数日历系统具有将时间线划分为两个时代的单个时期。 然而,有些有多个时代,比如每个领导人统治的时代。 确切的含义由年龄根据以下约束决定。
1970-01-01使用的时代必须具有值1.后来的时代必须具有较高的值。 较早的时间必须具有较低的值。 每个年表必须参考枚举或类似的单身,以提供时代价值观。
该方法返回指定时代值的正确类型的单例时代。
eraValue
- 时代价值
DateTimeException
- 如果无法创造时代
List<Era> eras()
大多数日历系统都有一个时代,其中一年有意义。 如果日历系统不支持时间的概念,则必须返回空列表。
ValueRange range(ChronoField field)
所有字段可以表示为long
整数。 此方法返回描述该值的有效范围的对象。
请注意,结果仅描述最小和最大有效值,重要的是不要太多读取它们。 例如,可以在该范围内的值对该字段无效。
该方法将返回结果,无论年表是否支持该字段。
field
- 获取范围的字段,不为null
DateTimeException
- 如果无法获取字段的范围
default String getDisplayName(TextStyle style, Locale locale)
这返回用于标识年表的文本名称,适合向用户呈现。 参数控制返回的文本和区域设置的样式。
style
- 所需文本的样式,不为null
locale
- 要使用的语言环境,不为空
ChronoLocalDate resolveDate(Map<TemporalField,Long> fieldValues, ResolverStyle resolverStyle)
ChronoField
值。
大多数TemporalField
实现使用该字段上的resolve方法来解决。 相比之下, ChronoField
类定义的字段只具有相对于年表的意义。 因此, ChronoField
日期字段在具体年表的上下文中解决。
默认的实现,这也解释了典型的决心行为,提供AbstractChronology
。
fieldValues
- 可以更新的值的字段映射,不为null
resolverStyle
- 所请求的解析类型,不为null
DateTimeException
- 如果日期无法解决,通常是因为输入数据中存在冲突
default ChronoPeriod period(int years, int months, int days)
这使用指定的年份,月份和日期返回与这个年表相关的时期。 所有提供的年表使用基于年,月和日的期间,但是, ChronoPeriod
API允许使用其他单位来表示期间。
range(ChronoField)
开始的月数。
如果一年内的月数是固定的,则加法,减法和归一化的计算方法略有不同。
如果执行不基于对年,月和日一个不寻常的日历系统,或者你希望直接控制,那么ChronoPeriod
接口必须直接实现。
返回的时期是不变的,线程安全的。
years
- 年数,可能为负数
months
- 年数可能为负数
days
- 年数,可能为负数
int compareTo(Chronology other)
比较顺序首先按年表ID字符串,然后通过特定于子类的任何附加信息。 它与“等于”一致,如Comparable
所定义。
compareTo
在接口
Comparable<Chronology>
other
- 其他年表要比较,不是null
boolean equals(Object obj)
比较是基于对象的整个状态。
equals
在类别
Object
obj
- 要检查的对象,null返回false
Object.hashCode()
, HashMap
int hashCode()
哈希码应该基于对象的整个状态。
hashCode
在类别
Object
Object.equals(java.lang.Object)
,
System.identityHashCode(java.lang.Object)
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.