在查看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
常量。TemporalUnit
和TemporalField
接口(interface)提供了更高级别的抽象,允许添加和处理非时序无关的单位/字段。