在Java中将时间单位转换为持续时间

java.util.concurrent.TimeUnit以给定的粒度单位表示Java中的持续时间,并提供了跨单位转换的实用方法。 java.util.concurrent.TimeUnit最早是在Java早期(1.5)引入的,但自那时以来已经被扩展了好几次。 在此博客文章中,您将学习如何使用java.util.concurrent.TimeUnit将给定的时间单位转换为持续时间

先决条件

您需要JDK 11+才能运行示例。

了解如何使用SDKMAN管理多个Java SDK! 轻松

问题

在Java中将给定的时间单位转换为持续时间

使用java.concurrent.TimeUnit枚举。

Java 11

  • TimeUnit.convert(Duration duration)
 long yearInMillis = TimeUnit.MILLISECONDS.convert(Duration.ofDays( 365 ));  long hourInMillis = TimeUnit.MILLISECONDS.convert(Duration.ofHours( 1 ));  long minuteInMillis = TimeUnit.MILLISECONDS.convert(Duration.ofMinutes( 1 )); 
  • 使用java.time.ChronoUnit TimeUnit.convert(Duration duration)
 long yearInMillis = TimeUnit.MILLISECONDS.convert(Duration.of( 365 , TimeUnit.DAYS.toChronoUnit()));  long hourInMillis = TimeUnit.MILLISECONDS.convert(Duration.of( 1 , TimeUnit.HOURS.toChronoUnit()));  long minuteInMillis = TimeUnit.MILLISECONDS.convert(Duration.of( 1 , TimeUnit.MINUTES.toChronoUnit())); 

Java 11之前的版本

  • 通用TimeUnit.convert(long sourceDuration, TimeUnit sourceUnit)
 long yearInMillis = TimeUnit.DAYS.toMillis( 365 );  long hourInMillis = TimeUnit.HOURS.toMillis( 1 );  long minuteInMillis = TimeUnit.MINUTES.toMillis( 1 ); 
  • TimeUnit.toMillis(long duration)TimeUnit.toSeconds(long duration)等方法:
 long yearInMillis = TimeUnit.MILLISECONDS.convert( 365 , TimeUnit.DAYS);  long hourInMillis = TimeUnit.MILLISECONDS.convert( 1 , TimeUnit.HOURS);  long minuteInMillis = TimeUnit.MILLISECONDS.convert( 1 , TimeUnit.MINUTES); 

最后的例子

 class Java11TimeUnitConvertTests { public static final long DAYS_IN_A_YEAR = 365L; public static final long HOURS_IN_A_DAY = 24L; public static final long MINUTES_IN_AN_HOUR = 60L; public static final long SECONDS_IN_A_MINUTE = 60L; public static final long MILLISECONDS_IN_A_SECOND = 1000L; @Test void aYearInMillis() { // A year in milliseconds long yearInMillis = TimeUnit.MILLISECONDS.convert(Duration.ofDays( 365 )); // since Java 11 assertThat(yearInMillis) .isEqualTo(DAYS_IN_A_YEAR * HOURS_IN_A_DAY * MINUTES_IN_AN_HOUR * SECONDS_IN_A_MINUTE * MILLISECONDS_IN_A_SECOND) .isEqualTo(TimeUnit.DAYS.toMillis( 365 )) .isEqualTo(TimeUnit.MILLISECONDS.convert( 365 , TimeUnit.DAYS)) .isEqualTo(TimeUnit.MILLISECONDS.convert(Duration.of( 365 , TimeUnit.DAYS.toChronoUnit()))); // since Java 11 } @Test void anHourInMillis() { long hourInMillis = TimeUnit.MILLISECONDS.convert(Duration.ofHours( 1 )); // since Java 11         assertThat(hourInMillis) .isEqualTo(MINUTES_IN_AN_HOUR * SECONDS_IN_A_MINUTE * MILLISECONDS_IN_A_SECOND) .isEqualTo(TimeUnit.HOURS.toMillis( 1 )) .isEqualTo(TimeUnit.MILLISECONDS.convert( 1 , TimeUnit.HOURS)) .isEqualTo(TimeUnit.MILLISECONDS.convert(Duration.of( 1 , TimeUnit.HOURS.toChronoUnit()))); // since Java 11 } @Test void aMinuteInMillis() {         long minuteInMillis = TimeUnit.MILLISECONDS.convert(Duration.ofMinutes( 1 )); // since Java 11         assertThat(minuteInMillis) .isEqualTo(SECONDS_IN_A_MINUTE * MILLISECONDS_IN_A_SECOND) .isEqualTo(TimeUnit.MINUTES.toMillis( 1 )) .isEqualTo(TimeUnit.MILLISECONDS.convert( 1 , TimeUnit.MINUTES)) .isEqualTo(TimeUnit.MILLISECONDS.convert(Duration.of( 1 , TimeUnit.MINUTES.toChronoUnit()))); // since Java 11 } @ParameterizedTest @MethodSource ( "timeUnitToDuration" ) void convertTimeUnitToDuration(TimeUnit unit, Duration duration, long expectedResult) { long actualResult = unit.convert(duration); assertThat(actualResult).isEqualTo(expectedResult); } private static Stream<Arguments> timeUnitToDuration() { return Stream.of( Arguments.of(TimeUnit.DAYS, Duration.ofHours( 24 ), 1 ), // 24h = 1d Arguments.of(TimeUnit.DAYS, Duration.ofHours( 40 ), 1 ), // 40h = 1d Arguments.of(TimeUnit.DAYS, Duration.ofHours( 48 ), 2 ), // 48h = 2d Arguments.of(TimeUnit.DAYS, Duration.ofHours( 50 ), 2 ), // 50h = 2d Arguments.of(TimeUnit.MILLISECONDS, Duration.ofSeconds( 1 ), 1000 ), // 1s = 1000ms Arguments.of(TimeUnit.MILLISECONDS, Duration.ofSeconds( 11 ), 11000 ), // 1s = 11000ms 11000 // 1s = 11000ms Arguments.of(TimeUnit.SECONDS, Duration.ofHours( 1 ), 3600 ), // 1h = 3600s Arguments.of(TimeUnit.HOURS, Duration.ofSeconds(4_000), 1 ), // 4000s = 1h Arguments.of(TimeUnit.HOURS, Duration.ofSeconds(1_0000), 2 ) // 10000s = 2h ); }  } 

源代码

可以在Github上找到本文的源代码: https : //github.com/kolorobot/java9-and-beyond

翻译自: https://www.javacodegeeks.com/2020/05/convert-time-unit-to-duration-in-java.html

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

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

相关文章

ajax contenttype详解_$.ajax中contentType: “application/json” 的用法详解

具体内容如下所示&#xff1a;$.ajax({type: httpMethod,cache:false,async:false,contentType: "application/json; charsetutf-8",dataType: "json",//返回值类型url: pathurl,data:jsonData,success: function(data){var resultData 返回码data.status…

在text html模版中写js,Rails3使用text/html内容类型而不是text/javascript呈现js.erb模板...

我正在使用3.0.0.beta3构建一个新的应用程序.我只是尝试将js.erb模板呈现给Ajax请求以执行以下操作(在publications_controller.rb中):def get_pubmed_dataentry Bio::PubMed.query(params[:pmid])# searches PubMed and get entrypublication Bio::MEDLINE.new(entry) # cre…

jq监听子元素被点击_vue开发app点击字母展示地区列表(兄弟组件之间联动)

下图这种地区搜索方式在很多app中都很常见&#xff0c;今天就使用vue框架中的 better-scroll 第三方包来实现页面滚动和点击侧边栏字母该字母开头的地区列表置顶功能。1、A子组件通过使用 this.$emit(事件名字&#xff0c;事件携带内容) 向外触发事件首先&#xff0c;在组件每个…

e-mobile帐号状态存在异常_一文掌握异常检测的实用方法 | 技术实践

作者 | Vegard Flovik译者 | Tianyu责编 | Jane出品 | AI科技大本营&#xff08;ID: rgznai100&#xff09;【导读】今天这篇文章会向大家介绍几个有关机器学习和统计分析的技术和应用&#xff0c;并展示如何使用这些方法解决一些具体的异常检测和状态监控实例。相信对一些开发…

用Spring组成自定义注释

Java批注在2004年随Java 5一起引入&#xff0c;是一种将元数据添加到Java源代码中的方法。 如今&#xff0c;许多主要框架&#xff08;如Spring或Hibernate&#xff09;都严重依赖注释。 在本文中&#xff0c;我们将介绍一个非常有用的Spring功能&#xff0c;该功能允许我们基…

单片机sleep函数的头文件_单片机代码模块化设计思想浅谈

前言&#xff1a;前段时间分享的文章【单片机裸机代码框架设计思路】&#xff0c;很多读者给我留言&#xff0c;觉得很不错&#xff0c;对于初学者而言&#xff0c;这是一个进阶的技巧&#xff0c;对于我而言&#xff0c;这是对自己总结和表达能力的一个提升。本文章我们再谈谈…

html中显示数据库中的一条数据,如何使用html表显示数据库中的数据

我正在尝试在HTML表中显示数据库中的数据。主要问题是&#xff1a;该表未出现。IdStringArray// Mostrar dadosecho "{$databaseName visteon;$pdo new Pdo(mysql:host127.0.0.1;dbname . $databaseName, root, );$result $pdo->query(SHOW TABLES FROM . $databas…

jquery 字符串查找_JQuery、Vue等考点

一. 写出下面程序的运行结果for结果&#xff1a;1秒后一下子打印出5个5。当循环完成时才会轮到setTimeout异步执行其回调函数function&#xff0c;此时i已经变成5&#xff0c;故5个console.log(i)里的i全使用的是5。易错点&#xff1a;千万别写成“打印5个4”啊&#xff01;暴风…

html网页效果分析,熟手的html编写风格与原因分析_HTML/Xhtml_网页制作

一、导航&#xff1a;无序列表 对 其它标签元素用最常用的“无序列表“来写导航的理由是显而易见的&#xff0c;它代表一列链接&#xff0c;这本身就有足够的理由应选择列表标签。但需要移除list列表的默认样式&#xff0c;以使其更有意义。另一个好处可能超出你的想象&#xf…

qgis 图片_QGIS入门教程公告!!!

从本周开始&#xff0c;我将每周日更新一期QGIS入门教程视频&#xff0c;带讲解&#xff0c;估计这也是很多朋友所希望的。操作中用到的数据下载链接我会放在每一期的视频下方。以下是入门课程的目录&#xff1a;1.开启你的QGIS之旅——制作你的第一张地图2.属性表基础——字段…

v-if 表单验证_避免许多if块进行验证检查

v-if 表单验证在某些情况下&#xff0c;我们需要先验证输入数据&#xff0c;然后再将其发送到业务逻辑层进行处理&#xff0c;计算等。这种验证在大多数情况下是孤立进行的&#xff0c;或者可能包括与外部数据或其他输入的一些交叉检查。 看下面的示例&#xff0c;该示例验证用…

css less 不要作用到子对象_CSS-预处理语言Sass、Less简述

CSS作为前端开发的三驾马车之一&#xff0c;无时无刻不在影响着前端的发展。为了让 CSS 变得更加的好用&#xff0c;出现了一些预处理语言。 它们让 CSS 彻底变成一门可以使用变量 、循环 、继承 、自定义方法等多种特性的标记语言&#xff0c;逻辑性得以大大增强SassSass是成熟…

html图片平铺div,前端小知识——图片平铺问题

图片平铺有两种方式&#xff0c;直接写img标签或者通过background-image方式1&#xff0c;img标签HTML&#xff1a;CSS:.row{margin:0,auto;width:100%;}img{width:100%;height:100%;margin: 0 auto;display: block;font-size: 0;}这样写的话&#xff0c;三张图片能够垂直平铺&…

JMetro版本11.6.8和8.6.8发布

另一个版本&#xff0c;这次是较短的更新。 撰写文档和博客文章有点不知所措&#xff0c;但是我认为我不得不更新文档&#xff0c;因为它已经被更新了大约一年或更长时间。 因此&#xff0c;对于此发行版&#xff0c;我也专注于此。 这是链接&#xff1a; Javafx主题JMetro页面…

python用pip安装numpy mac_小白入门Python,mac下如何安装pip、ipython

作为一枚小白&#xff0c;最近在学习用Python写科学计算器&#xff0c;因为Mac不自带pip&#xff0c;安装的时候找了好几个帖子&#xff0c;才成功安装。做一下简单分享&#xff0c;希望对大家有帮助&#xff1a; 安装环境&#xff1a; Mac系统版本&#xff1a;OS X 10.11.1 Py…

js 点击侧边栏展示内容_上海SEO优化网站侧边栏一般添加什么内容

相关推荐&#xff1a;https://www.huisheng.com/上海SEO优化网站侧边栏一般添加什么内容&#xff1f;企业做网站每个板块都是非常重要的&#xff0c;之前跟大家解析了关于导航栏的布局&#xff0c;哪些内容该添加&#xff0c;哪些内容不该添加&#xff0c;而今天小编要跟大家解…

html网页设如何置访问密码,利用JS给单页html加上简单访问密码,需要密码才能访问!...

本文最后更新于【 2019-12-21 22:28:00 】&#xff0c;某些文章具有时效性&#xff0c;若有错误或已失效&#xff0c;请在下方 留言 或联系 小P君 。今天在搞一个简单的短域名生成网页的时候&#xff0c;以防被滥用&#xff0c;所以想给html加一个简单的密码&#xff0c;需要…

python装饰器作用噜咕_python 装饰器的实际作用有哪些

终于知道python的装饰器是怎么回事&#xff0c;那在工作中&#xff0c;到底能干吗用呢&#xff1f; 尤其对我这个只会写写脚本又不做python开发的小测试/手动无辜脸。 先说结论&#xff0c;肯定是有用处滴。 一、自动化测试中使用 就拿写的自动化测试来说吧&#xff0c;如果我想…

机器人辅助的符文天赋_10.5版本T1辅助盘点 进攻型辅助主宰下路

摘要&#xff1a;今天为大家推荐10.5版本的三大T1辅助&#xff0c;在当前版本每层塔钱增加到160后&#xff0c;这些前期进攻性较强的辅助更容易上分&#xff0c;他们都有直接或间接击毁镀层的能力&#xff0c;赛娜推线压制后的远程点塔&#xff0c;机器人靠着钩子的威胁上前、日…

html5新变化,HTML5的新变化,分享

1、新的2、图形元素 figure &#xff0c;将与相结合&#xff0c;使图片标题与图片相搭配%3、不需要为链接和脚本标签添加类型的属性4、h5中不需要用引号将属性包裹起来5、使得内容可编辑。”contenteditable”&#xff0c;它将允许用户编辑元素(包括他的子元素)内包含的任何文本…