Module  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。 请注意,准确/估计忽略闰秒。

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

        boolean isDateBased​()
        检查本机是否代表日期的组成部分。

        日期是以时间为基础的,如果它可以用来暗示日期的含义。 它必须有一个duration ,这是标准日的长度的整数倍。 请注意, isDateBased()isTimeBased()可以返回false,例如当36小时代表单位时。

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

        boolean isTimeBased​()
        检查本机是否代表时间的一个组成部分。

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

        结果
        如果这个单位是时间的一个组成部分,则为真
      • isSupportedBy

        default boolean isSupportedBy​(Temporal temporal)
        检查本机是否受指定的时间对象的支持。

        这检查实施日期时间可以加/减这个单位。 这可以用来避免抛出异常。

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

        参数
        temporal - 要检查的时间对象,不为空
        结果
        如果设备支持,则为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) ,因为在代码中阅读更清楚。

        实现应该执行使用可用的单位有任何疑问或计算ChronoUnit或可用字段ChronoField 如果不支持本机,则必须抛出UnsupportedTemporalTypeException

        实现不能改变指定的时间对象。 相反,必须退还原件的调整副本。 这为不可变和可变的实现提供了相当的安全行为。

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

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

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

        计算返回一个整数,表示两个时间之间的完整单位数。 例如,11时30分至13时29分之间的小时数将只有1小时,因为距离两小时不到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 - 基本的时间对象,不为空
        temporal2Exclusive - 其他时间对象,排他,不为空
        结果
        在本单位之间的temporal1Inclusive和temporal2独家之间的时间量; 如果temporal2Exclusive晚于temporal1Inclusive,则为正,如果更早则为负
        异常
        DateTimeException - 如果不能计算金额,或者结束时间不能转换为与开始时间相同的类型
        UnsupportedTemporalTypeException - 如果单位不受时间支持
        ArithmeticException - 如果发生数字溢出
      • toString

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

        这应该是复数和上第一个骆驼案例,如“天”或“分钟”。

        重写:
        toStringObject
        结果
        本机的名称,不为空