Module java.base

Enum Class ChronoUnit

java.lang.Object
java.lang.Enum<ChronoUnit>
java.time.temporal.ChronoUnit
所有已实现的接口:
Serializable, Comparable<ChronoUnit>, Constable, TemporalUnit

public enum ChronoUnit extends Enum<ChronoUnit> implements TemporalUnit
日期周期单位的标准集合。

这组单位提供基于单位的访问以操作日期、时间或日期时间。标准单位集合可以通过实现TemporalUnit来扩展。

这些单位旨在适用于多个日历系统。例如,大多数非ISO日历系统定义了年、月和日的单位,只是规则略有不同。每个单位的文档解释了其操作方式。

实现要求:
这是一个最终的、不可变的和线程安全的枚举。
自版本:
1.8
  • Enum Constant Details

    • NANOS

      public static final ChronoUnit NANOS
      代表纳秒概念的单位,时间支持的最小单位。对于ISO日历系统,它等于秒单位的十亿分之一。
    • MICROS

      public static final ChronoUnit MICROS
      代表微秒概念的单位。对于ISO日历系统,它等于秒单位的百万分之一。
    • MILLIS

      public static final ChronoUnit MILLIS
      代表毫秒概念的单位。对于ISO日历系统,它等于秒单位的千分之一。
    • SECONDS

      public static final ChronoUnit SECONDS
      代表秒概念的单位。对于ISO日历系统,它等于国际单位制中的秒,除了闰秒。
    • MINUTES

      public static final ChronoUnit MINUTES
      代表分钟概念的单位。对于ISO日历系统,它等于60秒。
    • HOURS

      public static final ChronoUnit HOURS
      代表小时概念的单位。对于ISO日历系统,它等于60分钟。
    • HALF_DAYS

      public static final ChronoUnit HALF_DAYS
      代表半天概念的单位,如上午/下午所用。对于ISO日历系统,它等于12小时。
    • DAYS

      public static final ChronoUnit DAYS
      代表一天概念的单位。对于ISO日历系统,它是从午夜到午夜的标准日。一天的估计持续时间为24小时

      当与其他日历系统一起使用时,它必须对应于地球上太阳的升起和落下定义的一天。不要求一天从午夜开始 - 在转换日历系统时,日期应在中午等同。

    • WEEKS

      public static final ChronoUnit WEEKS
      代表一个星期概念的单位。对于ISO日历系统,它等于7天。

      当与其他日历系统一起使用时,它必须对应于整数天数。

    • MONTHS

      public static final ChronoUnit MONTHS
      代表一个月概念的单位。对于ISO日历系统,月份的长度因年份的不同而异。一个月的估计持续时间是365.2425天的十二分之一。

      当与其他日历系统一起使用时,它必须对应于整数天数。

    • YEARS

      public static final ChronoUnit YEARS
      代表一年概念的单位。对于ISO日历系统,它等于12个月。一年的估计持续时间是365.2425天

      当与其他日历系统一起使用时,它必须对应于整数天数或大致等于地球绕太阳一周定义的一年的整数月数。

    • DECADES

      public static final ChronoUnit DECADES
      代表一个十年概念的单位。对于ISO日历系统,它等于10年。

      当与其他日历系统一起使用时,它必须对应于整数天数,通常是整数年数。

    • CENTURIES

      public static final ChronoUnit CENTURIES
      代表一个世纪概念的单位。对于ISO日历系统,它等于100年。

      当与其他日历系统一起使用时,它必须对应于整数天数,通常是整数年数。

    • MILLENNIA

      public static final ChronoUnit MILLENNIA
      代表一个千年概念的单位。对于ISO日历系统,它等于1000年。

      当与其他日历系统一起使用时,它必须对应于整数天数,通常是整数年数。

    • ERAS

      public static final ChronoUnit ERAS
      代表一个时代概念的单位。ISO日历系统没有时代,因此无法向日期或日期时间添加时代。时代的估计持续时间被人为定义为1,000,000,000年

      当与其他日历系统一起使用时,对该单位没有限制。

    • FOREVER

      public static final ChronoUnit FOREVER
      代表永远概念的人工单位。主要用于TemporalField,表示无限制的字段,如年或时代。该单位的估计持续时间被人为定义为Duration支持的最大持续时间。
  • Method Details

    • values

      public static ChronoUnit[] values()
      返回包含此枚举类的常量的数组,按照它们声明的顺序。
      返回:
      包含此枚举类的常量的数组,按照它们声明的顺序
    • valueOf

      public static ChronoUnit valueOf(String name)
      返回具有指定名称的此类的枚举常量。字符串必须与此类中用于声明枚举常量的标识符完全匹配。(不允许多余的空格字符。)
      参数:
      name - 要返回的枚举常量的名称。
      返回:
      具有指定名称的枚举常量
      抛出:
      IllegalArgumentException - 如果此枚举类没有具有指定名称的常量
      NullPointerException - 如果参数为null
    • getDuration

      public Duration getDuration()
      获取ISO日历系统中此单位的估计持续时间。

      此类中的所有单位都有估计持续时间。由于夏令时,一天的长度会有所变化,而月份的长度也不同。

      指定者:
      getDuration 在接口 TemporalUnit
      返回:
      此单位的估计持续时间,非null
    • isDurationEstimated

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

      此类中的所有时间单位被认为是准确的,而所有日期单位被认为是估计的。

      此定义忽略了闰秒,但考虑到由于夏令时而导致的一天长度变化以及月份长度不同。

      指定者:
      isDurationEstimated 在接口 TemporalUnit
      返回:
      如果持续时间是估计的,则为true,如果准确则为false
    • isDateBased

      public boolean isDateBased()
      检查此单位是否为日期单位。

      从天到时代的所有单位都是基于日期的。基于时间的单位和FOREVER返回false。

      指定者:
      isDateBased 在接口 TemporalUnit
      返回:
      如果是日期单位,则为true,如果是时间单位则为false
    • isTimeBased

      public boolean isTimeBased()
      检查此单位是否为时间单位。

      从纳秒到半天的所有单位都是基于时间的。基于日期的单位和FOREVER返回false。

      指定者:
      isTimeBased 在接口 TemporalUnit
      返回:
      如果是时间单位,则为true,如果是日期单位则为false
    • addTo

      public <R extends Temporal> R addTo(R temporal, long amount)
      从接口复制的描述: TemporalUnit
      返回指定时间对象的副本,其中添加了指定的周期。

      添加的周期是此单位的倍数。例如,可以通过在表示“天”的实例上调用此方法,传递日期和周期“3”来向日期添加“3天”。要添加的周期可以是负数,这相当于减法。

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

         // 这两行是等效的,但建议使用第二种方法
         temporal = thisUnit.addTo(temporal);
         temporal = temporal.plus(thisUnit);
       
      建议使用第二种方法plus(TemporalUnit),因为在代码中更清晰易读。

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

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

      指定者:
      addTo 在接口 TemporalUnit
      类型参数:
      R - 时间对象的类型
      参数:
      temporal - 要调整的时间对象,不能为空
      amount - 要添加的此单位的数量,可以是正数或负数
      返回:
      调整后的时间对象,不能为空
    • between

      public long between(Temporal temporal1Inclusive, Temporal temporal2Exclusive)
      从接口复制的描述: TemporalUnit
      计算两个时间对象之间的时间量。

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

      计算返回一个整数,表示两个时间之间完整单位的数量。例如,在时间11:30和13:29之间的小时数只有一个小时,因为它比两个小时短一分钟。

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

         // 这两行是等效的
         between = thisUnit.between(start, end);
         between = start.until(end, thisUnit);
       
      应根据哪种方法使代码更易读来进行选择。

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

        long daysBetween = DAYS.between(start, end);
        // 或者
        long daysBetween = start.until(end, DAYS);
       

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

      指定者:
      between 在接口 TemporalUnit
      参数:
      temporal1Inclusive - 基本时间对象,不能为空
      temporal2Exclusive - 另一个时间对象,排他的,不能为空
      返回:
      temporal1Inclusive和temporal2Exclusive之间的时间量,以此单位表示;如果temporal2Exclusive晚于temporal1Inclusive,则为正数,如果早于则为负数
    • toString

      public String toString()
      从类复制的描述: Enum
      返回此枚举常量的名称,如声明中所包含的。虽然可以重写此方法,但通常不是必要或理想的。当存在更“程序员友好”的字符串形式时,枚举类应重写此方法。
      指定者:
      toString 在接口 TemporalUnit
      覆盖:
      toString 在类 Enum<ChronoUnit>
      返回:
      此枚举常量的名称