在查看Java 8 Time API时,我看到很多方法都希望将ChronoUnit(TemporalUnit的实现)作为参数here,而其他方法都希望将ChronoField(TemporalField的实现)作为here

当一种方法期望使用ChronoUnit以及什么时候使用ChronoField时,有人可以帮助我阐明设计者的决定吗?有什么不同?

谢谢。

最佳答案

单位用于测量时间量-年,月,日,小时,分钟,秒。例如,第二个是SI unit

相比之下,领域是人类通常指时间的方式,部分是时间。如果您查看数字时钟,秒数将从0到59计数,然后再次返回0。这是一个字段-在这种情况下是“分钟的秒数”,是通过计算一分钟内的秒数来形成的。同样,天数是在一个月之内,而月份是在一年之内。要在时间线上定义一个完整的点,您必须具有一组链接的字段,例如:

第二分钟 每小时

  • 小时
  • 每天的时间
  • 每月的日期
  • 年度月份
  • 年(永远)
  • ChronoField API公开了分钟的两个部分。使用getBaseUnit()获取“秒”,并使用getRangeUnit()获取“分钟”。

    名称的Chrono部分指的是定义与时间无关的事实。具体来说,这意味着单位或字段仅在与日历系统或Chronology关联时才具有含义。科普特年表就是一个例子,一年中有13个月。尽管这与常见的民用/ISO日历系统不同,但仍可以使用ChronoField.MONTH_OF_YEAR常量。
    TemporalUnitTemporalField接口(interface)提供了更高级别的抽象,允许添加和处理非时序无关的单位/字段。

    09-05 08:49