模块  java.base
软件包  java.time.temporal

Interface TemporalUnit

  • 所有已知实现类:
    ChronoUnit

    public interface TemporalUnit
    日期时间单位,例如天或小时。

    时间的测量建立在单位上,例如年,月,日,小时,分钟和秒。 此接口的实现表示这些单元。

    此接口的实例表示单元本身,而不是单元的数量。 有关以通用单位表示金额的类,请参阅Period

    最常用的单位在ChronoUnit中定义。 更多装置供应IsoFields 通过实现此接口,还可以通过应用程序代码编写单元。

    该单位使用双重调度。 客户端代码调用日期时间方法,如LocalDateTime ,检查单位是否为ChronoUnit 如果是,那么日期时间必须处理它。 否则,将方法调用重新分派到此接口中的匹配方法。

    实现要求:
    必须小心实现此接口,以确保其他类正常运行。 可以实例化的所有实现必须是最终的,不可变的和线程安全的。 建议尽可能使用枚举。
    从以下版本开始:
    1.8
    • 方法详细信息

      • getDuration

        Duration getDuration()
        获取此单位的持续时间,可能是估计值。

        所有单位都返回此方法以标准纳秒为单位测量的持续时间。 持续时间将是正数且非零。 例如,一小时的持续时间为60 * 60 * 1,000,000,000ns

        有些单位可能返回准确的持续时间,而其他单位则返回估计 例如,由于夏令时变化的可能性,天数具有估计的持续时间。 要确定持续时间是否为估计值,请使用isDurationEstimated()

        结果
        本单位的持续时间,可能是估计值,不为空
      • isDurationEstimated

        boolean isDurationEstimated()
        检查单位的持续时间是否为估计值。

        所有单位都有持续时间,但持续时间并不总是准确的。 例如,由于夏令时变化的可能性,天数具有估计的持续时间。 如果持续时间是估计值,则此方法返回true,如果持续时间是准确的则返回false。 请注意,准确/估计忽略闰秒。

        结果
        如果估计持续时间则为true,如果准确则为false
      • isDateBased

        boolean isDateBased()
        检查此单位是否代表日期的组成部分。

        如果日期可用于暗示日期的含义,则日期是基于时间的。 它必须具有duration ,它是标准日长度的整数倍。 请注意,它对isDateBased()isTimeBased()都有效,返回false,例如表示36小时的单位时。

        结果
        如果此单位是日期的组成部分,则为true
      • isTimeBased

        boolean isTimeBased()
        检查此单位是否代表某个时间的组成部分。

        单位是基于时间的,如果它可以用来暗示一时的含义。 它必须有一个duration ,它分为标准日的长度,没有余数。 请注意,它对isDateBased()isTimeBased()都有效,返回false,例如代表36小时的单位时。

        结果
        如果此单位是时间的组成部分,则为true
      • isSupportedBy

        default boolean isSupportedBy​(Temporal temporal)
        检查指定的时态对象是否支持此单元。

        这将检查实施日期时间是否可以添加/减去此单位。 这可以用来避免抛出异常。

        此默认实现使用Temporal.plus(long, TemporalUnit)派生值。

        参数
        temporal - 要检查的临时对象,而不是null
        结果
        如果支持该单位,则为true
      • addTo

        <R extends Temporal> R addTo​(R temporal,
                                     long amount)
        返回指定时间段的指定时间对象的副本。

        添加的时间是该单位的倍数。 例如,通过在表示“days”的实例上调用此方法,传递日期和句点“3”,可以使用此方法将“3天”添加到日期。 要添加的时段可以是负的,这相当于减法。

        使用此方法有两种等效方法。 第一种是直接调用此方法。 第二种是使用Temporal.plus(long, TemporalUnit)

          // these two lines are equivalent, but the second approach is recommended
           temporal = thisUnit.addTo(temporal);
           temporal = temporal.plus(thisUnit); 
        建议使用第二种方法, plus(TemporalUnit) ,因为在代码中读取要清楚plus(TemporalUnit)

        实现应使用ChronoUnit可用的单位或ChronoField提供的字段执行任何查询或计算。 如果不支持该装置,则必须抛出UnsupportedTemporalTypeException

        实现不得更改指定的时态对象。 相反,必须返回原始的调整副本。 这为不可变和可变实现提供了等效的安全行为。

        参数类型
        R - 临时对象的类型
        参数
        temporal - 要调整的时态对象,而不是null
        amount - 要添加的单位数量,正数或负数
        结果
        调整后的时态对象,不为空
        异常
        DateTimeException - 如果金额无法添加
        UnsupportedTemporalTypeException - 如果时间不支持该单位
      • between

        long between​(Temporal temporal1Inclusive,
                     Temporal temporal2Exclusive)
        计算两个临时对象之间的时间量。

        这将根据此单位计算金额。 起点和终点作为临时对象提供,并且必须是兼容类型。 在计算金额之前,实现将第二种类型转换为第一种类型的实例。 如果结束在开始之前,结果将是否定的。 例如,可以使用HOURS.between(startTime, endTime)计算两个临时对象之间的小时HOURS.between(startTime, endTime)

        计算返回一个整数,表示两个时间之间的完整单位数。 例如,11:30到13:29之间的小时数仅为1小时,因为它是两小时的一分钟。

        使用此方法有两种等效方法。 第一种是直接调用此方法。 第二个是使用Temporal.until(Temporal, TemporalUnit)

          // these two lines are equivalent
           between = thisUnit.between(start, end);
           between = start.until(end, thisUnit); 
        应该根据哪个使代码更具可读性来做出选择。

        例如,此方法允许计算两个日期之间的天数:

          long daysBetween = DAYS.between(start, end);
          // or alternatively
          long daysBetween = start.until(end, DAYS); 

        实现应使用ChronoUnit提供的单位或ChronoField提供的字段执行任何查询或计算。 如果不支持该装置,则必须抛出UnsupportedTemporalTypeException 实现不得更改指定的临时对象。

        实现要求:
        实现必须首先使用getClass()检查两个时间类型是否具有相同的类型。 如果他们不这样做,那么必须通过致电temporal1Inclusive.until(temporal2Exclusive, this)获得结果。
        参数
        temporal1Inclusive - 基本时态对象,不为null
        temporal2Exclusive - 另一个临时对象,独占,非空
        结果
        以该单位表示的temporal1Inclusive和temporal2Exclusive之间的时间量; 如果temporal2Exclusive晚于temporal1Inclusive,则为positive,如果更早则为negative
        异常
        DateTimeException - 如果无法计算金额,或者结束时间不能转换为与开始时间相同的类型
        UnsupportedTemporalTypeException - 如果时间不支持该单位
        ArithmeticException - 如果发生数字溢出
      • toString

        String toString()
        获取单元的描述性名称。

        这应该是复数和上头骆驼的情况,例如“天”或“分钟”。

        重写:
        toString in class Object
        结果
        这个单位的名称,不是null