- 所有已实现的接口:
Serializable,Comparable<Year>,Temporal,TemporalAccessor,TemporalAdjuster
2007 。
Year 是代表年份的不可变日期时间对象。可以得到任何可以从年份导出的字段。
请注意,ISO 年表中的年份仅与现代格里高利 - 朱利安系统中的年份一致。直到 1920 年,俄罗斯部分地区才改用现代公历/ISO 规则。因此,必须谨慎对待历史年份。
此类不存储或表示月、日、时间或时区。例如,值“2007”可以存储在 Year 中。
此类代表的年份遵循 ISO-8601 标准并使用预编号系统。第 1 年之前是第 0 年,然后是第 -1 年。
ISO-8601 日历系统是当今世界大部分地区使用的现代民用日历系统。它相当于公历系统,在所有时间都适用今天的闰年规则。对于当今编写的大多数应用程序,ISO-8601 规则完全适用。然而,任何使用历史日期并要求它们准确的应用程序都会发现 ISO-8601 方法不合适。
这是一个value-based类;程序员应该将 equal 的实例视为可互换的,并且不应使用实例进行同步,否则可能会发生不可预测的行为。例如,在未来的版本中,同步可能会失败。 equals 方法应该用于比较。
- 实现要求:
- 这个类是不可变的和线程安全的。
- 自从:
- 1.8
- 参见:
-
字段摘要
字段 -
方法总结
修饰符和类型方法描述adjustInto(Temporal temporal) 将指定的时间对象调整为具有今年。atDay(int dayOfYear) 将今年与一年中的某一天结合起来创建一个LocalDate。atMonth(int month) 将今年与一个月结合起来创建一个YearMonth。将今年与一个月结合起来创建一个YearMonth。atMonthDay(MonthDay monthDay) 将今年与月-日结合起来创建一个LocalDate。int将今年与另一年进行比较。boolean检查今年是否等于另一年。format(DateTimeFormatter formatter) 今年使用指定的格式化程序格式化。static Yearfrom(TemporalAccessor temporal) 从时间对象中获取Year的实例。intget(TemporalField field) 从今年获取指定字段的值作为int。longgetLong(TemporalField field) 获取今年指定字段的值作为long。intgetValue()获取年份值。inthashCode()今年的哈希码。boolean检查今年是否在指定年份之后。boolean检查今年是否在指定年份之前。booleanisLeap()根据 ISO proleptic 日历系统规则,检查年份是否为闰年。static booleanisLeap(long year) 根据 ISO proleptic 日历系统规则,检查年份是否为闰年。booleanisSupported(TemporalField field) 检查是否支持指定的字段。booleanisSupported(TemporalUnit unit) 检查是否支持指定的单位。booleanisValidMonthDay(MonthDay monthDay) 检查今年的月日是否有效。intlength()获取今年的天数。minus(long amountToSubtract, TemporalUnit unit) 返回减去指定数量的今年的副本。minus(TemporalAmount amountToSubtract) 返回减去指定数量的今年的副本。minusYears(long yearsToSubtract) 返回此Year的副本,并减去指定的年数。static Yearnow()从默认时区的系统时钟获取当前年份。static Year从指定时钟获取当前年份。static Year从指定时区的系统时钟获取当前年份。static Yearof(int isoYear) 获得Year的实例。static Yearparse(CharSequence text) 从2007等文本字符串中获取Year的实例。static Yearparse(CharSequence text, DateTimeFormatter formatter) 使用特定格式化程序从文本字符串中获取Year的实例。plus(long amountToAdd, TemporalUnit unit) 返回添加了指定数量的今年的副本。plus(TemporalAmount amountToAdd) 返回添加了指定数量的今年的副本。plusYears(long yearsToAdd) 返回此Year的副本,并添加了指定的年数。<R> Rquery(TemporalQuery<R> query) 今年使用指定查询查询。range(TemporalField field) 获取指定字段的有效值范围。toString()今年的输出为String。longuntil(Temporal endExclusive, TemporalUnit unit) 根据指定的单位计算到另一年的时间量。with(TemporalAdjuster adjuster) 返回今年的调整副本。with(TemporalField field, long newValue) 返回今年的副本,并将指定字段设置为新值。
-
字段详细信息
-
MIN_VALUE
public static final int MIN_VALUE支持的最小年份“-999,999,999”。- 参见:
-
MAX_VALUE
public static final int MAX_VALUE支持的最大年份,“+999,999,999”。- 参见:
-
-
方法详情
-
now
从默认时区的系统时钟获取当前年份。这将查询默认时区中的
system clock以获取当前年份。使用此方法将阻止使用备用时钟进行测试的能力,因为时钟是硬编码的。
- 返回:
- 使用系统时钟和默认时区的当前年份,不为空
-
now
从指定时区的系统时钟获取当前年份。这将查询
system clock以获取当前年份。指定时区避免了对默认时区的依赖。使用此方法将阻止使用备用时钟进行测试的能力,因为时钟是硬编码的。
- 参数:
zone- 要使用的区域 ID,不为空- 返回:
- 使用系统时钟的当前年份,不为空
-
now
从指定时钟获取当前年份。这将查询指定的时钟以获取当前年份。使用此方法允许使用备用时钟进行测试。可以使用
dependency injection引入备用时钟。- 参数:
clock- 使用的时钟,不为空- 返回:
- 当前年份,不为空
-
of
获得Year的实例。此方法接受来自 proleptic ISO 日历系统的年份值。
公元 2 年/公元 2 年用 2 表示。
公元 1 年/公元 1 年用 1 表示。
1BC/BCE 年份用 0 表示。
2BC/BCE 年用-1 表示。- 参数:
isoYear- 要表示的 ISO 预测年份,从MIN_VALUE到MAX_VALUE- 返回:
- 年份,不为空
- 抛出:
DateTimeException- 如果字段无效
-
from
从时间对象中获取Year的实例。这将根据指定的时间获取年份。
TemporalAccessor表示一组任意的日期和时间信息,该工厂将其转换为Year的一个实例。转换提取
year字段。仅当时间对象具有 ISO 年表或可以转换为LocalDate时才允许提取。此方法与功能接口
TemporalQuery的签名相匹配,允许它通过方法参考Year::from用作查询。- 参数:
temporal- 要转换的时间对象,不为空- 返回:
- 年份,不为空
- 抛出:
DateTimeException- 如果无法转换为Year
-
parse
从2007等文本字符串中获取Year的实例。该字符串必须代表有效年份。
- 参数:
text- 要解析的文本,例如“2007”,不为空- 返回:
- 解析的年份,不为空
- 抛出:
DateTimeParseException- 如果无法解析文本
-
parse
使用特定格式化程序从文本字符串中获取Year的实例。使用格式化程序解析文本,返回年份。
- 参数:
text- 要解析的文本,不为空formatter- 要使用的格式化程序,不为空- 返回:
- 解析的年份,不为空
- 抛出:
DateTimeParseException- 如果无法解析文本
-
isLeap
public static boolean isLeap(long year) 根据 ISO proleptic 日历系统规则,检查年份是否为闰年。此方法在整个时间线上应用当前的闰年规则。一般来说,如果年份可以被四整除而没有余数,则为闰年。但是,能被 100 整除的年份不是闰年,但能被 400 整除的年份除外。
例如,1904 是闰年,它可以被 4 整除。1900 不是闰年,因为它可以被 100 整除,但是 2000 是闰年,因为它可以被 400 整除。
计算是有前瞻性的——将相同的规则应用到遥远的未来和遥远的过去。这在历史上是不准确的,但对于 ISO-8601 标准是正确的。
- 参数:
year- 要检查的年份- 返回:
- 如果年份是闰年则为 true,否则为 false
-
getValue
public int getValue()获取年份值。根据
get(YEAR),此方法返回的年份是预估的。- 返回:
-
这一年,
MIN_VALUE到MAX_VALUE
-
isSupported
检查是否支持指定的字段。这将检查是否可以针对指定字段查询今年。如果为 false,则调用
range、get和with(TemporalField, long)方法将抛出异常。如果该字段是一个
ChronoField那么查询就在这里实现。支持的字段是:YEAR_OF_ERAYEARERA
ChronoField实例将返回 false。如果该字段不是
ChronoField,则通过调用TemporalField.isSupportedBy(TemporalAccessor)传递this作为参数来获得此方法的结果。字段是否支持由字段决定。- 指定者:
isSupported在接口TemporalAccessor中- 参数:
field- 要检查的字段,null 返回 false- 返回:
- 如果今年支持该字段,则为 true,否则为 false
-
isSupported
检查是否支持指定的单位。这将检查指定的单位是否可以添加到今年或从中减去。如果为 false,则调用
plus(long, TemporalUnit)和minus方法将抛出异常。如果单位是
ChronoUnit那么查询就是在这里实现的。支持的单位有:YEARSDECADESCENTURIESMILLENNIAERAS
ChronoUnit实例将返回 false。如果单位不是
ChronoUnit,则通过调用TemporalUnit.isSupportedBy(Temporal)传递this作为参数来获得此方法的结果。是否支持该单元由单元决定。- 指定者:
isSupported在接口Temporal中- 参数:
unit- 要检查的单位,null 返回 false- 返回:
- 如果可以添加/减去单位,则为 true,否则为 false
-
range
获取指定字段的有效值范围。范围对象表示字段的最小和最大有效值。今年用于增强返回范围的准确性。如果由于不支持该字段或其他原因而无法返回范围,则会抛出异常。
如果该字段是一个
ChronoField那么查询就在这里实现。supported fields将返回适当的范围实例。所有其他ChronoField实例将抛出UnsupportedTemporalTypeException。如果该字段不是
ChronoField,则通过调用TemporalField.rangeRefinedBy(TemporalAccessor)传递this作为参数来获得此方法的结果。能否获取范围由字段决定。- 指定者:
range在接口TemporalAccessor中- 参数:
field- 查询范围的字段,不为空- 返回:
- 该字段的有效值范围,不为空
- 抛出:
DateTimeException- 如果无法获得该字段的范围UnsupportedTemporalTypeException- 如果不支持该字段
-
get
从今年获取指定字段的值作为int。这将查询今年指定字段的值。返回值将始终在该字段的有效值范围内。如果由于不支持该字段或其他原因而无法返回该值,则会抛出异常。
如果该字段是一个
ChronoField那么查询就在这里实现。supported fields将返回基于今年的有效值。所有其他ChronoField实例将抛出UnsupportedTemporalTypeException。如果该字段不是
ChronoField,则通过调用TemporalField.getFrom(TemporalAccessor)传递this作为参数来获得此方法的结果。能否获取到该值,该值代表什么,由字段决定。- 指定者:
get在接口TemporalAccessor中- 参数:
field- 要获取的字段,不为空- 返回:
- 该字段的值
- 抛出:
DateTimeException- 如果无法获取该字段的值或该值超出该字段的有效值范围UnsupportedTemporalTypeException- 如果不支持该字段或值的范围超过intArithmeticException- 如果发生数字溢出
-
getLong
获取今年指定字段的值作为long。这将查询今年指定字段的值。如果由于不支持该字段或其他原因而无法返回该值,则会抛出异常。
如果该字段是一个
ChronoField那么查询就在这里实现。supported fields将返回基于今年的有效值。所有其他ChronoField实例将抛出UnsupportedTemporalTypeException。如果该字段不是
ChronoField,则通过调用TemporalField.getFrom(TemporalAccessor)传递this作为参数来获得此方法的结果。能否获取到该值,该值代表什么,由字段决定。- 指定者:
getLong在接口TemporalAccessor中- 参数:
field- 要获取的字段,不为空- 返回:
- 该字段的值
- 抛出:
DateTimeException- 如果无法获得该字段的值UnsupportedTemporalTypeException- 如果不支持该字段ArithmeticException- 如果发生数字溢出
-
isLeap
public boolean isLeap()根据 ISO proleptic 日历系统规则,检查年份是否为闰年。此方法在整个时间线上应用当前的闰年规则。一般来说,如果年份可以被四整除而没有余数,则为闰年。但是,能被 100 整除的年份不是闰年,但能被 400 整除的年份除外。
例如,1904 是闰年,它可以被 4 整除。1900 不是闰年,因为它可以被 100 整除,但是 2000 是闰年,因为它可以被 400 整除。
计算是有前瞻性的——将相同的规则应用到遥远的未来和遥远的过去。这在历史上是不准确的,但对于 ISO-8601 标准是正确的。
- 返回:
- 如果年份是闰年则为 true,否则为 false
-
isValidMonthDay
检查今年的月日是否有效。此方法检查今年和输入的月份和日期是否构成有效日期。
- 参数:
monthDay- 要验证的月-日,null 返回 false- 返回:
- 如果月份和日期在今年有效,则为真
-
length
public int length()获取今年的天数。- 返回:
- 今年的天数,365 或 366
-
with
返回今年的调整副本。这将返回一个
Year,基于这个,并调整了年份。使用指定的调整器策略对象进行调整。阅读调整器的文档以了解将进行的调整。此方法的结果是通过在指定的调节器上调用
TemporalAdjuster.adjustInto(Temporal)方法并将this作为参数传递来获得的。此实例是不可变的,不受此方法调用的影响。
- 指定者:
with在接口Temporal中- 参数:
adjuster- 要使用的调节器,不为空- 返回:
-
a
Year基于this并进行了调整,不为空 - 抛出:
DateTimeException- 如果无法进行调整ArithmeticException- 如果发生数字溢出
-
with
返回今年的副本,并将指定字段设置为新值。这将返回一个
Year,基于这个,指定字段的值已更改。如果无法设置该值,因为不支持该字段或出于其他原因,则会抛出异常。如果该字段是
ChronoField则在此处执行调整。支持的字段行为如下:YEAR_OF_ERA- 返回具有指定年份的Year时代将保持不变。YEAR- 返回具有指定年份的Year。这完全取代了日期,相当于of(int)。ERA- 返回具有指定纪元的Year。纪元年将保持不变。
在所有情况下,如果新值超出该字段的有效值范围,则会抛出
DateTimeException。所有其他
ChronoField实例将抛出UnsupportedTemporalTypeException。如果该字段不是
ChronoField,则通过调用TemporalField.adjustInto(Temporal, long)传递this作为参数来获得此方法的结果。在这种情况下,该字段决定是否以及如何调整瞬间。此实例是不可变的,不受此方法调用的影响。
- 指定者:
with在接口Temporal中- 参数:
field- 要在结果中设置的字段,不为空newValue- 结果中字段的新值- 返回:
-
基于
this的Year具有指定的字段集,不为空 - 抛出:
DateTimeException- 如果无法设置字段UnsupportedTemporalTypeException- 如果不支持该字段ArithmeticException- 如果发生数字溢出
-
plus
返回添加了指定数量的今年的副本。这将返回一个
Year,基于这个,添加了指定的数量。数量通常是Period但可以是实现TemporalAmount接口的任何其他类型。通过调用
TemporalAmount.addTo(Temporal)将计算委托给金额对象。金额实现可以自由地以任何它希望的方式实现加法,但是它通常会回调plus(long, TemporalUnit)。查阅amount实现的文档,判断是否可以添加成功。此实例是不可变的,不受此方法调用的影响。
- 指定者:
plus在接口Temporal中- 参数:
amountToAdd- 添加的数量,不为空- 返回:
-
a
Year基于今年的添加,不为空 - 抛出:
DateTimeException- 如果无法添加ArithmeticException- 如果发生数字溢出
-
plus
返回添加了指定数量的今年的副本。这将返回一个
Year,基于这个,以添加的单位表示数量。如果由于不支持该单位或其他原因而无法添加金额,则会抛出异常。如果该字段是
ChronoUnit,则在此处实现加法。支持的字段行为如下:YEARS- 返回添加了指定年数的Year。这相当于plusYears(long)。DECADES- 返回一个Year添加了指定的十进制数。这相当于用金额乘以 10 调用plusYears(long)。CENTURIES- 返回添加了指定世纪数的Year。这相当于用金额乘以 100 调用plusYears(long)。MILLENNIA- 返回一个Year添加了指定的千年数。这相当于用金额乘以 1,000 调用plusYears(long)。ERAS- 返回添加了指定纪元数的Year。仅支持两个纪元,因此数量必须为一、零或负一。如果金额不为零,则年份会发生变化,因此时代年份不变。
所有其他
ChronoUnit实例将抛出UnsupportedTemporalTypeException。如果该字段不是
ChronoUnit,则通过调用TemporalUnit.addTo(Temporal, long)传递this作为参数来获得此方法的结果。在这种情况下,该单元确定是否以及如何执行加法。此实例是不可变的,不受此方法调用的影响。
- 指定者:
plus在接口Temporal中- 参数:
amountToAdd- 添加到结果的单位数量,可能为负数unit- 添加量的单位,不为空- 返回:
-
a
Year基于今年加上指定数量,不为空 - 抛出:
DateTimeException- 如果无法添加UnsupportedTemporalTypeException- 如果不支持该单元ArithmeticException- 如果发生数字溢出
-
plusYears
返回此Year的副本,并添加了指定的年数。此实例是不可变的,不受此方法调用的影响。
- 参数:
yearsToAdd- 添加的年份,可能为负- 返回:
Year基于今年加上年份,不为空- 抛出:
DateTimeException- 如果结果超出支持的范围
-
minus
返回减去指定数量的今年的副本。这将返回一个
Year,基于这个,减去指定的数量。数量通常是Period但可以是实现TemporalAmount接口的任何其他类型。通过调用
TemporalAmount.subtractFrom(Temporal)将计算委托给金额对象。金额实现可以自由地以任何它希望的方式实现减法,但是它通常会回调minus(long, TemporalUnit)。查阅 amount 实现的文档以确定是否可以成功减去。此实例是不可变的,不受此方法调用的影响。
- 指定者:
minus在接口Temporal中- 参数:
amountToSubtract- 要减去的金额,不为空- 返回:
-
a
Year基于今年的减法,不为空 - 抛出:
DateTimeException- 如果无法进行减法ArithmeticException- 如果发生数字溢出
-
minus
返回减去指定数量的今年的副本。这将返回一个
Year,基于这个,减去单位数量。如果无法减去金额,因为不支持该单位或出于其他原因,则会抛出异常。此方法等同于
plus(long, TemporalUnit)取反金额。有关加法和减法如何工作的完整描述,请参阅该方法。此实例是不可变的,不受此方法调用的影响。
- 指定者:
minus在接口Temporal中- 参数:
amountToSubtract- 要从结果中减去的单位数量,可能为负数unit- 要减去的金额的单位,不为空- 返回:
-
a
Year基于今年减去指定金额,不为空 - 抛出:
DateTimeException- 如果无法进行减法UnsupportedTemporalTypeException- 如果不支持该单元ArithmeticException- 如果发生数字溢出
-
minusYears
返回此Year的副本,并减去指定的年数。此实例是不可变的,不受此方法调用的影响。
- 参数:
yearsToSubtract- 要减去的年份,可能为负数- 返回:
Year基于今年减去年份,不为空- 抛出:
DateTimeException- 如果结果超出支持的范围
-
query
今年使用指定查询查询。这查询今年使用指定的查询策略对象。
TemporalQuery对象定义了用于获取结果的逻辑。阅读查询文档以了解此方法的结果。此方法的结果是通过对指定查询调用
TemporalQuery.queryFrom(TemporalAccessor)方法并将this作为参数传递来获得的。- 指定者:
query在接口TemporalAccessor中- 类型参数:
R- 结果的类型- 参数:
query- 要调用的查询,不为空- 返回:
- 查询结果,可能返回null(由查询定义)
- 抛出:
DateTimeException- 如果无法查询(由查询定义)ArithmeticException- 如果发生数字溢出(由查询定义)
-
adjustInto
将指定的时间对象调整为具有今年。这将返回一个与输入相同的可观察类型的时间对象,并将年份更改为与此相同。
调整相当于使用
Temporal.with(TemporalField, long)传递ChronoField.YEAR作为字段。如果指定的时间对象不使用 ISO 日历系统,则抛出DateTimeException。在大多数情况下,使用
Temporal.with(TemporalAdjuster)反转调用模式会更清楚:// these two lines are equivalent, but the second approach is recommended temporal = thisYear.adjustInto(temporal); temporal = temporal.with(thisYear);
此实例是不可变的,不受此方法调用的影响。
- 指定者:
adjustInto在接口TemporalAdjuster中- 参数:
temporal- 要调整的目标对象,不为空- 返回:
- 调整后的对象,不为空
- 抛出:
DateTimeException- 如果无法进行调整ArithmeticException- 如果发生数字溢出
-
until
根据指定的单位计算到另一年的时间量。这根据单个
TemporalUnit计算两个Year对象之间的时间量。起点和终点是this和指定的年份。如果结束早于开始,结果将为负。传递给此方法的Temporal使用from(TemporalAccessor)转换为Year。例如,可以使用startYear.until(endYear, DECADES)计算两年之间以十年为单位的金额。计算返回一个整数,表示两年之间的完整单位数。例如,2012 年至 2031 年之间的几十年数量将只有一个十年,因为它比两个十年少一年。
有两种等效的方法可以使用此方法。第一个是调用这个方法。第二种是使用
TemporalUnit.between(Temporal, Temporal):// these two lines are equivalent amount = start.until(end, YEARS); amount = YEARS.between(start, end);
应该根据哪个使代码更具可读性来做出选择。ChronoUnit的计算在此方法中实现。支持单位YEARS、DECADES、CENTURIES、MILLENNIA和ERAS。其他ChronoUnit值将引发异常。如果单位不是
ChronoUnit,则通过调用TemporalUnit.between(Temporal, Temporal)将this作为第一个参数并将转换后的输入时间作为第二个参数来获得此方法的结果。此实例是不可变的,不受此方法调用的影响。
- 指定者:
until在接口Temporal中- 参数:
endExclusive- 结束日期,独占,转换为Year,不为空unit- 衡量数量的单位,不为空- 返回:
- 今年和年底之间的时间量
- 抛出:
DateTimeException- 如果无法计算金额,或者结束时间无法转换为YearUnsupportedTemporalTypeException- 如果不支持该单元ArithmeticException- 如果发生数字溢出
-
format
今年使用指定的格式化程序格式化。今年将传递给格式化程序以产生一个字符串。
- 参数:
formatter- 要使用的格式化程序,不为空- 返回:
- 格式化的年份字符串,不为空
- 抛出:
DateTimeException- 如果在打印过程中发生错误
-
atDay
将今年与一年中的某一天结合起来创建一个LocalDate。这将返回从今年和指定日期形成的
LocalDate。日期值 366 仅在闰年有效。
- 参数:
dayOfYear- 使用的日期,从 1 到 365-366- 返回:
- 从今年开始形成的本地日期和年份的指定日期,不为空
- 抛出:
DateTimeException- 如果一年中的第几天为零或更小,366 或更大或等于 366 并且这不是闰年
-
atMonth
将今年与一个月结合起来创建一个YearMonth。这将返回从今年和指定月份形成的
YearMonth。年份和月份的所有可能组合均有效。此方法可用作链的一部分来生成日期:
LocalDate date = year.atMonth(month).atDay(day);
- 参数:
month- 使用的月份,不为空- 返回:
- 从今年和指定月份形成的年月,不为空
-
atMonth
将今年与一个月结合起来创建一个YearMonth。这将返回从今年和指定月份形成的
YearMonth。年份和月份的所有可能组合均有效。此方法可用作链的一部分来生成日期:
LocalDate date = year.atMonth(month).atDay(day);
- 参数:
month- 使用的月份,从 1(一月)到 12(十二月)- 返回:
- 从今年和指定月份形成的年月,不为空
- 抛出:
DateTimeException- 如果月份无效
-
atMonthDay
将今年与月-日结合起来创建一个LocalDate。这将返回从今年和指定月日形成的
LocalDate。如果年份不是闰年,结果日期中的 2 月 29 日将调整为 2 月 28 日。
- 参数:
monthDay- 使用的月日,不为空- 返回:
- 从今年和指定的月日形成的本地日期,不为空
-
compareTo
将今年与另一年进行比较。比较基于年份的值。正如
Comparable所定义的那样,它“与等于一致”。- 指定者:
compareTo在接口Comparable<Year>中- 参数:
other- 要比较的另一年,不为空- 返回:
- 比较值,小于则为负,大于则为正
-
isAfter
检查今年是否在指定年份之后。- 参数:
other- 要比较的另一年,不为空- 返回:
- 如果这是在指定年份之后,则为真
-
isBefore
检查今年是否在指定年份之前。- 参数:
other- 要比较的另一年,不为空- 返回:
- 如果这一点在指定年份之前,则为真
-
equals
检查今年是否等于另一年。比较是基于年份的时间线位置。
-
hashCode
public int hashCode()今年的哈希码。 -
toString
今年的输出为String。
-