高度有用的Java ChronoUnit枚举

几年前,我发表了博客文章“ 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()和of(ChronoUnit)这些方法支持将TimeUnit转换为ChronoUnit以及将ChronoUnitTimeUnit 。 并非ChronoUnit所有值都可以转换为TimeUnit的等效值,在这种情况下,会抛出IllegalArgumentException 。

关于ChronoUnit中每个值的Javadoc注释描述了每个值代表什么时间单位。 但是,对于ChronoUnit每个值返回什么Duration ,这对我来说很有趣。 以下代码段会将这些DurationtoString()表示形式写入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.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/348868.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机管理ap,如何设置AC功能管理无线AP

AC功能管理无线AP第一步、连接ap举例型号TL-ER6520G不同类型的AP供电方式可能有所差异,包括直流电源供电和网线供电(PoE供电)两种。如下[1] 直流电源供电使用自带的电源适配器给AP供电,要求AP安放位置必须有电源插座,优点是节省成本。按照拓扑…

代表机械 计算机技术的颜色,基于机器视觉识别的交通灯控制系统

1、引言机器视觉又称计算机视觉,是用计算机来实现人的视觉功能,也就是用机器代替人眼来做测量和判断。机器视觉技术包含光源照明技术、光成像技术、传感器技术、数字图像处理技术、机械工程技术、检测控制技术、模拟与数字视频技术、计算机技术、人机接口…

java开发者工具开源版_JArchitect对Java开源贡献者免费

java开发者工具开源版JArchitect是用于Java代码库的静态分析工具,它提供交互式GUI和HTML报告,用于查找代码中过于复杂或有问题的区域,执行分析以重构并比较随时间的变化。 在版本3中,添加了类似LINQ的查询语言,该工具使…

有没有查计算机组成的答案得,计算机组成答案.doc

黄淮学院计算机科学系2008—2009年第二学期2007级《计算机组成原理》期终试卷(A)参考答案及评分标准命题人:王晓涓注意事项:本试卷适用于2007级软件工程专业本科学生使用一、单项选择题(每题1分、共15分)1、B 2、B 3、A 4、D 5、A 6、D 7、D 8、C 9、C 1…

使用JDK 8将收藏转换为地图

我多次遇到这样的情况,希望将多个对象存储在Map中而不是Set或List中,因为将唯一标识信息的Map应用于对象有一些优势 。 Java 8使用流和Collectors.toMap(…)方法使翻译变得比以往更加容易。 使用Map而不是Set的一种有用情况是&am…

计算机上没有启动程序怎么办,Win7开机不加载启动项怎么办

现在的电脑为了受到更好的保护,往往在开机的时候就加载了一些启动项,如:杀毒软件,安全卫士等等。可有时候会发现,在Win7操作系统中,安装后发现不能开机加载启动项。在注册表中,在msconfig中&…

车牌识别与计算机编程,基于计算机视觉的车牌字符识别技术的研究

摘要:车牌识别系统是现代智能交通管理系统的核心组成部分,是图像处理、神经网络和模式识别等技术的综合应用。 本文介绍了车牌识别系统的一般构成,包括车牌图像预处理、车牌字符分割和车牌字符识别等三个重要组成部分,并分别进行深入研究。 车牌图像预处理方面,针对…

线程同步,线程不同步_重新同步多线程集成测试

线程同步,线程不同步我最近在Captain Debug的Blog上偶然发现了一篇文章“ 同步多线程集成测试 ”。 那篇文章强调了设计涉及异步运行业务逻辑的被测类的集成测试的问题。 给出了这个人为的示例(我删除了一些评论): public class ThreadWrapp…

用户需求测试软件,用户需求和软件需求的区别

原标题:用户需求和软件需求的区别一些刚实施GJB5000A组织的开发人员,不是很理解软件研制任务书和软件需求规格说明的区别。这里再次解读下这个问题。软件研制任务书就是用户需求,而用户需求是从用户的角度,用用户熟悉的语言进行描…

在Java中使用可信时间戳

受信任的时间戳记是使受信任的第三方(“时间戳记权威”,TSA)以电子形式证明给定事件的时间的过程。 欧盟法规eIDAS赋予了这些时间戳合法的力量-即,如果事件带有时间戳,则没有人可以质疑事件的时间或内容。 它适用于多种…

无限滚动重置服务器,简单无限滚动的实现

在使用elementUI组件库的时候,用到了无限滚动这个功能。我没有看源码,直接在网上学习了下实现的思路,然后自己手动编码以下。在此总结下。假设页面上有一个盒子容器,容器内有一些子元素。容器的高度是固定的,有纵向滚动…

java配置openjdk_Java大新闻不断涌现:Java SE 6和OpenJDK

java配置openjdk我最近公布的最新的Java 8新闻 ,总结了一些最近的事态发展中的Java 8 。 自从发布该文章不到一周,就发布了更多重要的Java新闻报道,我在本文中总结了其中的一些内容。 共同的主题包括不同的Java SE 6实现和OpenJDK 。 Java安…

Fatjars,Thinwars以及为什么OpenLiberty很酷

法特哈斯 构建一个Fatjar(或Uberjar),其中包含将应用程序很好地打包在一起运行所需的一切,这意味着您可以: java -jar myapp.jar然后离开。 没有应用程序服务器。 没有类路径。 这种方法已经被诸如Springboot之类的微…

Spring Cloud Config Server简介

1.概述 在本教程中,我们将回顾Spring Cloud Config Server的基础知识。 我们将设置一个Config Server ,然后构建一个客户端应用程序 ,该客户端应用程序在启动时会消耗配置 ,然后刷新配置而不重新启动。 我们正在构建的应用程序与《…

朴素贝叶斯算法实现分类以及Matlab实现

开始 其实在学习机器学习的一些算法,最近也一直在看这方面的东西,并且尝试着使用Matlab进行一些算法的实现。这几天一直在看得就是贝叶斯算法实现一个分类问题。大概经过了一下这个过程: 看书→算法公式推演→网上查询资料→进一步理解→搜…

编写自定义的AssertJ断言

AssertJ是广泛使用的Hamcrest匹配器的替代匹配库。 实际上,对于我自己的项目,我已经更改为仅使用AssertJ-我只是发现流畅的界面和可扩展性非常吸引人。 您可以编写自定义断言,如下所示: 想象一下一种具有强度和饮料类型的咖啡 &…

LintCode-A + B 问题

文章转载 http://blog.csdn.net/wangyuquanliuli/article/details/47755461 给出两个整数a和b, 求他们的和, 但不能使用 等数学运算符。 您在真实的面试中是否遇到过这个题? Yes样例 如果 a1 并且 b2,返回3 注意 你不需要从输入流读入数据,…

位操作基础篇之位操作全面总结

转载自 http://blog.csdn.net/morewindows/article/details/7354571 Title: 位操作基础篇之位操作全面总结 KeyWord: C/C 位操作 位操作技巧 判断奇偶 交换两数 变换符号 求绝对值 位操作压缩空间 筛素数 位操作趣味应用 位操作笔试面试 位操作篇共分为基础篇和提高…

机器学习中的算法-支持向量机(SVM)基础

机器学习中的算法-支持向量机(SVM)基础 版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系wheeleastgmail.com。也可以加我的微博: leftnotea…

使用JDK 8轻松进行细粒度排序

Java的8的推出流和有用的静态 / 默认的方法比较接口可以很容易地根据个人的领域两个对象比较“值,而不需要实现一个比较(T,T)在其对象的类方法被比较。 我将使用一个简单的Song类来帮助演示这一点,接下来显示其Song.j…