public interface Temporal extends TemporalAccessor
这是日期、时间和偏移对象的基本接口类型,这些对象是完整的,可以使用正负。它是由那些类可以提供和fields或queries操纵信息实现。看到这个接口的只读版本TemporalAccessor
。
大多数日期和时间信息可以表示为一个数字。这些模型使用TemporalField
与持有使用long
处理大值。一年,一个月和一天是简单的领域的例子,但他们也包括即时和偏移。看到场的标准ChronoField
。
两件日期/时间信息不能代表数字的chronology和time-zone。这些可以通过定义静态方法queries
访问TemporalQuery
。
此接口是一个框架级接口,不应该被广泛应用于应用程序代码中。相反,应用程序应该创造和传递的具体类型的实例,如LocalDate
。这有很多原因,其中一部分是实现该接口可以在日历系统以外的ISO。看到一个充分讨论的问题ChronoLocalDate
。
一个类应该实现这个接口,如果它符合三个标准:
TemporalAccessor
四个例子使这个清晰:
LocalDate
实现此接口,因为它代表了一组,连续的天永远不需要外部的信息来确定每个日期的有效性领域。因此,它能够实现加/减正确。LocalTime
实现此接口,因为它代表了一组,连续几天内从Nano和不需要外部信息来确定有效性领域。它能够实现加/减正确,通过缠绕在一天。MonthDay
,每年的日和月的结合,没有实现这个接口。虽然组合是连续的,从几天到几年内,组合没有足够的信息来定义一个月的一天的有效范围。因此,它是无法实现加/减正确的。Comparable
。
Modifier and Type | Method and Description |
---|---|
boolean |
isSupported(TemporalUnit unit)
检查指定的单位是否被支持。
|
default Temporal |
minus(long amountToSubtract, TemporalUnit unit)
返回与指定期间减去的相同类型的对象。
|
default Temporal |
minus(TemporalAmount amount)
返回一个与此对象相同的类型的对象,该对象的金额减去。
|
Temporal |
plus(long amountToAdd, TemporalUnit unit)
返回与此对象相同的类型的对象,添加指定的周期。
|
default Temporal |
plus(TemporalAmount amount)
返回与此对象添加的相同类型的对象。
|
long |
until(Temporal endExclusive, TemporalUnit unit)
计算时间的量,直到指定单元的另一个时间。
|
default Temporal |
with(TemporalAdjuster adjuster)
返回与此对象调整的相同类型的调整对象。
|
Temporal |
with(TemporalField field, long newValue)
返回与指定字段更改的相同类型的对象。
|
get, getLong, isSupported, query, range
boolean isSupported(TemporalUnit unit)
此检查如果指定的单位可以添加到或减去,这个日期时间。如果为false,则调用plus(long, TemporalUnit)
和minus
方法将抛出一个异常。
ChronoUnit
中定义的所有单位。如果单位是支持的,那么真正的必须返回,否则错误必须返回。
如果该字段是不是ChronoUnit
,然后通过调用作为参数传递this
TemporalUnit.isSupportedBy(Temporal)
得到此方法的结果。
实现必须确保在调用此只读方法时,没有可观察到的状态发生改变。
unit
-检查单元,空返回false
default Temporal with(TemporalAdjuster adjuster)
根据指定的调节器的规则来调整这个日期时间。一个简单的调节器可以简单地设置一个字段,例如年字段。一个更复杂的调节器可能会把日期定在月的最后一天。选择常见的调整提供了TemporalAdjuster
。这些措施包括寻找“月的最后一天”和“下星期三”。该调节器是负责处理特殊情况下,如不同长度的月和跳跃年。
一些示例代码,说明如何以及为什么使用这种方法:
日期=日期(月,七月);//最关键的类实现temporaladjuster日期为日期,(lastdayofmonth());//静态导入调节器日期为日期,(下(星期三));//静态导入调节器和DayOfWeek
实现不能更改此对象或指定的时间对象。相反,必须返回原始的调整副本。这提供了等效,为不变的和可变的实现安全的行为。
默认实现必须相当于此代码:
返回adjustinto(这)调节器;
adjuster
-调节器使用,不为空
DateTimeException
如果无法适应
ArithmeticException
如果数值溢出时
Temporal with(TemporalField field, long newValue)
这将返回一个新的对象,在此基础上,以指定字段的值更改。例如,在一个LocalDate
,这可以用来设置年、月、日月。返回的对象将有相同的可观察的类型作为此对象。
在某些情况下,改变一个字段没有完全定义。例如,如果目标对象是代表1月31日的日期,则更改月至二月将不清楚。在这样的情况下,该字段负责解决结果。通常情况下,它会选择以前的有效日期,这将是二月的最后一个有效的一天,在这个例子中。
ChronoField
定义的所有领域。如果字段被支持,则必须执行该调整。如果不支持,那么
UnsupportedTemporalTypeException
必须扔。
如果该字段是不是ChronoField
,然后通过调用TemporalField.adjustInto(Temporal, long)
传递this
作为第一个参数,得到该方法的结果。
实现不能更改此对象。相反,必须返回原始的调整副本。这提供了等效,为不变的和可变的实现安全的行为。
field
-现场设置的结果,不为空
newValue
-场的结果中的新价值
DateTimeException
-如果该字段不能设置
UnsupportedTemporalTypeException
如果字段不支持
ArithmeticException
如果数值溢出时
default Temporal plus(TemporalAmount amount)
这调整这个时间,添加根据指定金额的规则。量是一个典型的Period
但可能是任何其他类型的实施TemporalAmount
接口,如Duration
。
一些示例代码,说明如何以及为什么使用这种方法:
日期=日期(期间);/ /添加一个周期实例日期。+(持续时间);/ /添加一个持续时间实例日期=日期。加(工作日(6));//实例用户编写的工作日的方法
注意,调用plus
随后minus
不保证返回相同的日期时间。
实现不能更改此对象或指定的时间对象。相反,必须返回原始的调整副本。这提供了等效,为不变的和可变的实现安全的行为。
默认实现必须相当于此代码:
返还金额增加(这);
amount
-添加量,不为空
DateTimeException
如果还不能
ArithmeticException
如果数值溢出时
Temporal plus(long amountToAdd, TemporalUnit unit)
此方法返回一个新的对象,在此基础上添加指定的周期。例如,在一个LocalDate
,这可以用来添加一个数年、月或日。返回的对象将有相同的可观察的类型作为此对象。
在某些情况下,改变一个字段没有完全定义。例如,如果目标对象是代表1月31日的日期,则添加一个月将不清楚。在这样的情况下,该字段负责解决结果。通常情况下,它会选择以前的有效日期,这将是二月的最后一个有效的一天,在这个例子中。
ChronoUnit
中定义的所有单位。如果单位是支持的,那么除了必须执行。如果不支持,那么
UnsupportedTemporalTypeException
必须扔。
如果单位不ChronoUnit
,然后通过调用TemporalUnit.addTo(Temporal, long)
传递this
作为第一个参数,得到该方法的结果。
实现不能更改此对象。相反,必须返回原始的调整副本。这提供了等效,为不变的和可变的实现安全的行为。
amountToAdd
-添加指定的单位的数量,可能是负面的
unit
-期添加单元,不为空
DateTimeException
如果单位不能添加
UnsupportedTemporalTypeException
如果单位不支持
ArithmeticException
如果数值溢出时
default Temporal minus(TemporalAmount amount)
这调整这个时间,减去根据指定金额的规则。量是一个典型的Period
但可能是任何其他类型的实施TemporalAmount
接口,如Duration
。
一些示例代码,说明如何以及为什么使用这种方法:
日期=日期减去(期间);/ /减去一个周期实例日期。减去(持续时间);/ /减去持续时间实例日期=日期减去(工作日(6));//实例用户编写的工作日的方法
注意,调用plus
随后minus
不保证返回相同的日期时间。
实现不能更改此对象或指定的时间对象。相反,必须返回原始的调整副本。这提供了等效,为不变的和可变的实现安全的行为。
默认实现必须相当于此代码:
返还金额减去(本);
amount
-减去的量,不为空
DateTimeException
如果减法不能做
ArithmeticException
如果数值溢出时
default Temporal minus(long amountToSubtract, TemporalUnit unit)
此方法返回一个新的对象,在此基础上减去指定的周期。例如,在一个LocalDate
,这可以用来减去一个数年、月或日。返回的对象将有相同的可观察的类型作为此对象。
在某些情况下,改变一个字段没有完全定义。例如,如果目标对象是代表3月31日的日期,那么减去一个月就不清楚了。在这样的情况下,该字段负责解决结果。通常情况下,它会选择以前的有效日期,这将是二月的最后一个有效的一天,在这个例子中。
实现不能更改此对象。相反,必须返回原始的调整副本。这提供了等效,为不变的和可变的实现安全的行为。
默认实现必须相当于此代码:
返回(amounttosubtract = = long.min_value?加(long.max_value,单元)。加(1单位):+(- amounttosubtract,单位));
amountToSubtract
-减去指定的单位的数量,可能是负面的
unit
-期减去单位,不为空
DateTimeException
如果单位不能扣除
UnsupportedTemporalTypeException
如果单位不支持
ArithmeticException
如果数值溢出时
long until(Temporal endExclusive, TemporalUnit unit)
这计算时间两时空对象之间在一个单一的TemporalUnit
条款。开始和结束点this
和指定的时间。结束点被转换为相同类型的起始点,如果不同的。结果将是负的,如果结束之前开始。例如,在两个时空对象之间的时间周期可以计算startTime.until(endTime, HOURS)
。
计算返回一个整数,表示两世间万物之间的完整的单元数。例如,在时间之间的时间11:30和29期只有一个小时,因为它是短暂的两小时一分钟。
使用这种方法有两个等效的方法。首先是直接调用这个方法。二是用TemporalUnit.between(Temporal, Temporal)
:
这两条线是等价的时间=开始,直到(结束,单位);时间=单位之间(开始,结束);的选择应基于使得代码更易读。
例如,该方法允许计算两个日期之间的天数:
长天=开始。直到(最后一天);或替代长天=天之间(开始、结束);
ChronoUnit
所有实例进行计算,
UnsupportedTemporalTypeException
必须抛出
ChronoUnit
实例是不支持的。
如果单位不ChronoUnit
,然后通过调用TemporalUnit.between(Temporal, Temporal)
this
作为第一个参数传递和转换的输入时间作为第二个参数给出了这个方法的结果。
总之,实现必须以相当于此伪代码的方式进行行为:
将结束时间转换为与此类相同的类型如果(单位是chronounit){如果支持单位,则计算和返回结果/ /其他投支持的单位unsupportedtemporaltypeexception}返回单元之间(这convertedendtemporal);
注意,该单位的between
方法必须调用,如果两个时空对象具有相同的类型进行getClass()
。
实现必须确保在调用此只读方法时,没有可观察到的状态发生改变。
endExclusive
-结束时间,独家,转换为类型对象一样,不为空
unit
-单位量来衡量,不为空
DateTimeException
如果金额无法计算,或结束时间不能转换为类型为这个时间相同
UnsupportedTemporalTypeException
如果单位不支持
ArithmeticException
如果数值溢出时
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.