当前位置:  开发笔记 > 编程语言 > 正文

java.time.temporal.ChronoUnit VS java.time.temporal.ChronoField

如何解决《java.time.temporal.ChronoUnitVSjava.time.temporal.ChronoField》经验,为你挑选了2个好方法。

在查看java 8 Time API时,我看到许多方法期望作为参数ChronoUnit(TemporalUnit的实现)在这里,而其他人期望ChronoField(TemporalField的实现)在这里.

当一个方法期望使用ChronoUnit和ChronoField以及它们的区别时,是否有人可以帮助我澄清设计者的决定?

谢谢.



1> JodaStephen..:

单位是用来衡量一个的时间-年,月,日,时,分,秒.例如,第二个是SI单位.

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

第二的分钟

微小的小时

小时的天

天的日

个月的一年

年(永远)

ChronoFieldAPI暴露的第二的分钟的两个部分.使用getBaseUnit()获得"秒",并getRangeUnit()获得"分钟".

Chrono名称的一部分是指定义是按时间顺序排列的.具体而言,这意味着单元或字段仅在与日历系统关联时具有意义,或者Chronology.这方面的一个例子是科普特年表,一年有13个月.尽管这与普通的民用/ ISO日历系统不同,但ChronoField.MONTH_OF_YEAR仍然可以使用该常数.

TemporalUnitTemporalField接口提供更高级别的抽象,使得单位/字段未年表中性添加和处理.



2> Meno Hochsch..:

A TemporalUnit用作时间测量的通用单位。因此,它可以用于确定两个给定时间点之间的时间量大小(抽象意义上)。

但是,a TemporalField不一定与任何种类的(抽象)时间轴相关,通常代表时间点的详细值。示例:一个月只是完整日历日期的一个组成部分,该日期包括年,月和日。

有人可能会认为日历月和月份单位或多或少可以被解释为等同。较旧的图书馆,例如java.util.Calendar这样的并没有什么不同。但是,字段和单位的使用方式与上面显示的方式非常不同(组成时间点与测量时间量)。

有趣的是,JDK-8设计人员已决定一个字段必须具有不为null 的基本单位(我个人对此缩小的决定感到不满意,因为我可以想象其他字段不一定具有基本单位)。在几个月的情况下,这是微不足道的。对于天数,我们有不同的字段,它们的基本单位为DAYS,例如每月的某天,每年的某天,每周的某天。这种1:n关系证明了在JSR-310(又名java.time-package)的上下文中单元和字段的分离是正确的。

推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有