普兰店网站建设公司,广州网站开发 d广州亦客网络,微信公众号免费开通,wordpress cms社交java 枚举内嵌枚举几年前#xff0c;我发表了博客文章“ The Highly有用的Java TimeUnit Enum ”#xff0c;其中介绍了JDK 5引入的TimeUnit枚举。 JDK 8引入了一个更新的枚举ChronoUnit #xff0c;它比TimeUnit更适合于并发以外的上下文#xff08;例如日期/时间操作我发表了博客文章“ The Highly有用的Java TimeUnit Enum ”其中介绍了JDK 5引入的TimeUnit枚举。 JDK 8引入了一个更新的枚举ChronoUnit 它比TimeUnit更适合于并发以外的上下文例如日期/时间操作。 位于所述java.time.temporal包 所述ChronoUnit类实现TemporalUnit接口 接口广泛使用的在高度期望 JDK 8导入日期/时间API 。 博客文章“ Java 8中的日期之间的天数 ”演示了使用此类来计算两个Temporal实例之间的时间段 。 博客文章“ Java 9.硬编码“永远”的地方。 ”介绍了JDK 9的“ TimeUnit类中的两个新方法” 。toChronoUnit和ofChronoUnit这些方法支持将TimeUnit转换为ChronoUnit以及将ChronoUnit为TimeUnit 。 并非ChronoUnit所有值都可以转换为TimeUnit的等效值在这种情况下将抛出IllegalArgumentException 。 关于ChronoUnit中每个值的Javadoc注释描述了每个值代表什么时间单位。 但是对ChronoUnit每个值返回什么样的Duration 这对我来说很有趣。 以下代码段会将这些Duration的toString()表示形式写入ChronoUnit枚举中的所有值的标准输出。 显示计时单位的持续时间 for (final ChronoUnit unit : ChronoUnit.values())
{final Duration duration unit.getDuration();out.println(unit : duration ( duration.getSeconds() seconds));
} 执行后以上代码将产生以下输出 Nanos: PT0.000000001S (0 seconds)
Micros: PT0.000001S (0 seconds)
Millis: PT0.001S (0 seconds)
Seconds: PT1S (1 seconds)
Minutes: PT1M (60 seconds)
Hours: PT1H (3600 seconds)
HalfDays: PT12H (43200 seconds)
Days: PT24H (86400 seconds)
Weeks: PT168H (604800 seconds)
Months: PT730H29M6S (2629746 seconds)
Years: PT8765H49M12S (31556952 seconds)
Decades: PT87658H12M (315569520 seconds)
Centuries: PT876582H (3155695200 seconds)
Millennia: PT8765820H (31556952000 seconds)
Eras: PT8765820000000H (31556952000000000 seconds)
Forever: PT2562047788015215H30M7.999999999S (9223372036854775807 seconds) 上面显示的每个Duration字符串表示形式上的“ PT”前缀表示根据ISO-8601标准 该表示形式是“期间”持续时间标记“ P”和“时间”指示“ T”。 “ S”“ M”和“ H”分别是秒分钟和小时。 的值ChronoUnit代表时间单位小于秒 NANOS MICROS 和MILLIS 示出了“0秒”因为它们是小于1秒返回值是一个整体long 。 关于ChronoUnit类中定义的每个值的Javadoc注释编写得很好。 它们遵循我的想法是Javadoc的“最佳实践”在Javadoc中放置简洁但内容丰富的初始句子以显示在生成HTML页面的“方法摘要”部分中并在该初始摘要之后的句子中放置其他有用的详细信息句子。 例如 ChronoUnit.ERAS的Javadoc注释指出“ 代表时代概念的单位。 ISO日历系统没有纪元因此不可能在日期或日期时间中添加纪元。 人为地将时代的估计持续时间定义为1,000,000,000年。 与其他日历系统一起使用时该装置没有任何限制。” “方法摘要”中显示的是加粗的句子我加了强调此处显示的全部文本完整显示在方法上方。 在ChronoUnit枚举中更有趣的值之一是FOREVER 。 如上面代码清单的输出所示 FOREVER值的Duration为“ PT2562047788015215H30M7.999999999S”对应于2562047788015215小时30分钟和7.999999999秒。 或者正如Grzegorz Gajos所说的那样“ Java 永远将其定义为9 223 372 036 854 775 807秒。 这是2.92277266×10 11年。 最好确保在超时之前安排在应用程序中进行Java升级。” ChronoUnit.FOREVER会有用 其基于Javadoc的描述解释了其存在的主要原因“代表永远概念的人工单位。 这主要与TemporalField一起使用以表示无限制的字段例如年份或时代。 人为地将时代的估计持续时间定义为Duration支持的最大持续Duration 。” TimeUnit是使用Java的并发构造的有用枚举 并且可以在并发以外的其他上下文中使用只要考虑了对这些其他上下文的一些严格限制即可。 JDK 8引入的ChronoUnit对于这些非并发上下文来说是一个更好的枚举并且特别设计用于JDK 8 Date / Time API 翻译自: https://www.javacodegeeks.com/2018/01/highly-useful-java-chronounit-enum.htmljava 枚举内嵌枚举