引言

Java 8 中引入了两个与日期相关的新类:

  • Period :基于日期值

  • Duration:基于时间值

它们最大的作用就不需要你自己复杂的计算关于两个年月日之间的相差的时间或日期啦.

Period 类与 Duration 类都是一段持续时间的概念,如果需要对比时间,它们就需要一个固定的时间值,所以就需要 LocalDate 类与 Instant 类来配合它们使用:

  • Period 对应使用 LocalDate ,它们的作用范围域都是日期(年/月/日)

  • Duration 对应使用 Instant,它们的作用范围域都是时间(天/时/分/秒/毫秒/纳秒)

LocalDate

精度到日期记录固定时间值的LocalDate,创建方式:

LocalDate localDate1 = LocalDate.of(2019,9,1);
LocalDate localDate2 = LocalDate.ofYearDay(2019,150);
Period

对比时间

LocalDate start = LocalDate.of(2019,9,25);
LocalDate end = LocalDate.of(2019,9,29);
Period period = Period.between(start, end);
System.out.println("相差天数="+period.getDays());
Instant

以精度到纳秒记录固定的时间值的Instant,创建方式:

Instant instant1 = Instant.parse("2017-10-03T10:15:30.00Z");//用解析字符串的形式创建
Instant instant2 = Instant.ofEpochMilli(System.currentTimeMillis());//用传入单位为毫秒的时间戳创建
Instant instant3 = Instant.ofEpochSecond(System.currentTimeMillis()/1000);//用传入为单位秒的

以上代码都是创建了某个时间点的值

Duration

Duration字面意思是持续时间

  • 设置指定单位的持续时间
Duration durationDays = Duration.ofDays(1);//天
Duration durationHours = Duration.ofHours(1);//小时
Duration durationMinutes = Duration.ofMinutes(1);//分
Duration durationSeconds = Duration.ofSeconds(1);//秒
Duration durationMillis = Duration.ofMillis(1);//毫秒
  • 获取指定单位的持续时间
Duration duration = Duration.ofDays(1);//设置一天时间
long timeHours = duration.toHours();//小时
long timeMinutes = duration.toMinutes();//分钟
long timeMillis = duration.toMillis();//毫秒
long timeNanos = duration.toNanos();//纳秒
String timeString = duration.toString(); //此持续时间的字符串表示形式,使用基于ISO-8601秒*的表示形式,例如 PT8H6M12.345S
System.out.println("timeHours时间="+timeHours);
System.out.println("timeMinutes时间="+timeMinutes);
System.out.println("timeMillis时间="+timeMillis);
System.out.println("timeNanos时间="+timeNanos);
System.out.println("timeString时间="+timeString);
  • 获取2个时间点之间差值的持续时间
long todayTimeMillis = System.currentTimeMillis();
long yesterdayTimeMillis = todayTimeMillis - 24 * 60 * 60 * 1000;
Instant start = Instant.ofEpochMilli(yesterdayTimeMillis);
Instant end = Instant.ofEpochMilli(todayTimeMillis); Duration duration = Duration.between(start, end);
System.out.println("天数="+duration.toDays());

注意这个天数是可以负数,意味着如果开始时间比结束时间更后面就会得到负数天数

Java8 Period 类与 Duration 类 用法详解的更多相关文章

  1. CSS中伪类及伪元素用法详解

    CSS中伪类及伪元素用法详解   伪类的分类及作用: 注:该表引自W3School教程 伪元素的分类及作用: 接下来让博主通过一些生动的实例(之前的作业或小作品)来说明几种常用伪类的用法和效果,其他的 ...

  2. Java学习 时间类 Period类与Duration类 / LocalDate类与Instant类 用法详解

    前言 java 8 中引入的两个与日期相关的新类:Period 和 Duration.两个类看表示时间量或两个日期之间的差,两者之间的差异为:Period基于日期值,而Duration基于时间值.他们 ...

  3. java8学习之收集器用法详解与多级分组和分区

    收集器用法详解: 在上次已经系统的阅读了Collector收集器的Javadoc对它已经有一个比较详细的认知了,但是!!!它毕境是只是一个接口,要使用的话还得用它的实现类,所以在Java8中有它进行了 ...

  4. 2020了你还不会Java8新特性?(五)收集器比较器用法详解及源码剖析

    收集器用法详解与多级分组和分区 为什么在collectors类中定义一个静态内部类? static class CollectorImpl<T, A, R> implements Coll ...

  5. StringUtils类API及使用方法详解

    StringUtils类API及使用方法详解 StringUtils方法概览 判空函数 1)StringUtils.isEmpty(String str) 2)StringUtils.isNotEmp ...

  6. 第15.10节 PyQt(Python+Qt)入门学习:Qt Designer可视化设计界面组件与QWidget类相关的组件属性详解

    PyQt学习有阵子了,对章节的骨架基本考虑好了,准备本节就写组件的属性的,结果一是日常工作繁忙,经常晚上还要加班,二是Qt的组件属性很多,只能逐一学习.研究和整理,花的时间有点长,不过终于将可视化设计 ...

  7. @RequestMapping 用法详解之地址映射

    @RequestMapping 用法详解之地址映射 引言: 前段时间项目中用到了RESTful模式来开发程序,但是当用POST.PUT模式提交数据时,发现服务器端接受不到提交的数据(服务器端参数绑定没 ...

  8. linux管道命令grep命令参数及用法详解---附使用案例|grep

    功能说明:查找文件里符合条件的字符串. 语 法:grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>] ...

  9. c++中vector的用法详解

    c++中vector的用法详解 vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间 ...

随机推荐

  1. HarmonyOS开发者看过来,HDD上海站传递的重要信息都在这里

    4月17日,颇有HarmonyOS年度总结性质的HarmonyOS开发者日活动上海站正式开始. 活动中,华为消费者业务AI与智慧全场景业务部副总裁段孟对HarmonyOS生态建设的最新进展做了发言,并 ...

  2. Java多线程编程(同步、死锁、生产消费者问题)

    Java多线程编程(同步.死锁.生产消费): 关于线程同步以及死锁问题: 线程同步概念:是指若干个线程对象并行进行资源的访问时实现的资源处理保护操作: 线程死锁概念:是指两个线程都在等待对方先完成,造 ...

  3. 2021 DevOpsDays 东京站完美收官 | CODING 专家受邀分享最新技术资讯

    DevOpsDays 是一个全球知名的系列技术会议品牌,内容涵盖了软件开发.自动化.测试.安全.组织文化以及 IT 运营的社区会议等.DevOpsDays 由 DevOps 之父 Patrick De ...

  4. 3、带你一步一步学习ASP.NET Core中的配置之Configuration

    如果你是刚接触ASP.NET Core的学习的话,你会注意到:在ASP.NET Core项目中,看不到.NET Fraemwork时代中的web.config文件和app.config文件了.那么你肯 ...

  5. Python表达式进阶——列表表达式

    x = 0 y = x*2 if x >= 0 else x print(y) # [表达式for变量in列表] l1 = [] l2 = [i for i in range(100) if i ...

  6. Django--虚拟环境、项目和应用的创建

    第一点:官方手册 -- https://yiyibooks.cn/ 第二点:运行环境 -- django项目采用虚拟运行环境 之前我们pip install都是在Python的安装目录(底层)上安装的 ...

  7. 【SpringBoot】SpringBoot2.x整合Shiro(一)

    一:什么是ACL和RBAC: ACL: Access Control List 访问控制列表 以前盛行的一种权限设计,它的核心在于用户直接和权限挂钩 优点:简单易用,开发便捷 缺点:用户和权限直接挂钩 ...

  8. WPF小经验

    Binding.IsAsync当属性值填充好后,与该属性绑定的界面才会开始加载(属性绑定优于控件加载) private IList<string> _list; public IList& ...

  9. vue-axios的总结及项目中的常见封装方法。

    前言 我们知道 vue 2.0版本开始推荐使用 axios 来完成前端 ajax 请求,axios 是一个基于Promise 的 http 库,可以用在浏览器和 node.js 中,axios 成为v ...

  10. Mac 解压缩软件-keka

    去官网 GitHub地址 功能预览