Java8 Period 类与 Duration 类 用法详解
引言
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 类 用法详解的更多相关文章
- CSS中伪类及伪元素用法详解
CSS中伪类及伪元素用法详解 伪类的分类及作用: 注:该表引自W3School教程 伪元素的分类及作用: 接下来让博主通过一些生动的实例(之前的作业或小作品)来说明几种常用伪类的用法和效果,其他的 ...
- Java学习 时间类 Period类与Duration类 / LocalDate类与Instant类 用法详解
前言 java 8 中引入的两个与日期相关的新类:Period 和 Duration.两个类看表示时间量或两个日期之间的差,两者之间的差异为:Period基于日期值,而Duration基于时间值.他们 ...
- java8学习之收集器用法详解与多级分组和分区
收集器用法详解: 在上次已经系统的阅读了Collector收集器的Javadoc对它已经有一个比较详细的认知了,但是!!!它毕境是只是一个接口,要使用的话还得用它的实现类,所以在Java8中有它进行了 ...
- 2020了你还不会Java8新特性?(五)收集器比较器用法详解及源码剖析
收集器用法详解与多级分组和分区 为什么在collectors类中定义一个静态内部类? static class CollectorImpl<T, A, R> implements Coll ...
- StringUtils类API及使用方法详解
StringUtils类API及使用方法详解 StringUtils方法概览 判空函数 1)StringUtils.isEmpty(String str) 2)StringUtils.isNotEmp ...
- 第15.10节 PyQt(Python+Qt)入门学习:Qt Designer可视化设计界面组件与QWidget类相关的组件属性详解
PyQt学习有阵子了,对章节的骨架基本考虑好了,准备本节就写组件的属性的,结果一是日常工作繁忙,经常晚上还要加班,二是Qt的组件属性很多,只能逐一学习.研究和整理,花的时间有点长,不过终于将可视化设计 ...
- @RequestMapping 用法详解之地址映射
@RequestMapping 用法详解之地址映射 引言: 前段时间项目中用到了RESTful模式来开发程序,但是当用POST.PUT模式提交数据时,发现服务器端接受不到提交的数据(服务器端参数绑定没 ...
- linux管道命令grep命令参数及用法详解---附使用案例|grep
功能说明:查找文件里符合条件的字符串. 语 法:grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>] ...
- c++中vector的用法详解
c++中vector的用法详解 vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间 ...
随机推荐
- Webpack的基本配置和打包与介绍
1. 前言 1.1 Webpack是什么 可能有很多的小伙伴对于这个Webpack既熟悉又陌生,有一些刚开始接触vue的小伙伴在对项目进行打包的时候经常会使用到npm run build来进行打包,但 ...
- 「新特性」Spring Boot 全局懒加载机制了解一下
关于延迟加载 在 Spring 中,默认情况下所有定的 bean 及其依赖项目都是在应用启动时创建容器上下文是被初始化的.测试代码如下: @Slf4j @Configuration public cl ...
- 次小生成树 详解及模板 (仅kruskal)
思路 关于次小生成树,首先求出最小生成树,然后枚举每条不在最小生成树上的边(在原本的节点上添加一个vis属性进行判断即可),并把这条边放到最小生成树上面,然后就一定会形成环,那么我们在这条环路中取出一 ...
- 【Azure Developer】使用Java SDK代码创建Azure VM (包含设置NSG,及添加数据磁盘SSD)
在参考Azure官方文档进行VM创建时,发现其中没有包含如何设置NSG的内容,以及如何在创建时就添加数据磁盘的代码(设置磁盘为SSD类型).本文的内容以"使用 Java 创建和管理 Azur ...
- 2021 年最值得推荐的 7 个 Angular 前端组件库 - DevUI
摘要:DevUI 是一款面向企业中后台产品的开源前端解决方案,它倡导沉浸.灵活.至简的设计价值观,提倡设计者为真实的需求服务,为多数人的设计,拒绝哗众取宠.取悦眼球的设计.如果你正在开发 ToB 的工 ...
- 看从小自带BUFF的他,如何用代码降低万物互联的门槛
摘要:3岁下象棋,5岁解方程!他说物联网开发就像打怪玩游戏 本文分享自华为云社区<HDC.Cloud2021 | 华为云IoT开发者:用代码降低万物互联的门槛>,原文作者:华为云头条 . ...
- KMP算法:next和nextval值计算
KMP算法的next和nextval值计算 先看看next数据值的求解方法 例:下标从1开始(若题中给定下标为0开始,把所有值-1即可) next数组的求解方法:根据前一个字符next,一直循环找到第 ...
- 修正js跳转
var urls = new Array();urls["pc"] = "./hp"; //pcurls["sj"] = "./h ...
- C#-获取磁盘,cpu,内存信息
获取磁盘信息 zongdaxiao = GetHardDiskSpace("C") * 1.0 / 1024; user = GetHardDiskFreeSpace(" ...
- Swift系列二 - 循环控制
一.if-else if后面的条件可以省略小括号 条件后面的大括号不可以省略 let age = 10 if age >= 18 { print("大学") } else i ...