介绍java 8 的 Period 和 Duration 类
介绍java 8 的 Period 和 Duration 类
本文我们学习java 8 中引入的两个与日期相关的新类:Period 和 Duration。两个类看表示时间量或两个日期之间的差,两者之间的差异为:Period基于日期值,而Duration基于时间值。
Period 类
Period 类表示一段时间的年、月、日,开使用between()方法获取两个日期之间的差作为Period 对象返回:
LocalDate startDate = LocalDate.of(2015, 2, 20);
LocalDate endDate = LocalDate.of(2017, 1, 15);Period period = Period.between(startDate, endDate);
然后,我们或从Period对象中货位日期单元,使用getYears(),getMonhs(),getDays()方法:
LOG.info("Years:" + period.getYears() + " months:" + period.getMonths() + " days:"+period.getDays());
这种情况下,任何一个时间单元为负数,则isNegative()方法返回true,因此可以用于判断endDate是否大于startDate:
assertFalse(period.isNegative());
如果isNegative()返回false,那么startDate早于endDate。
另一个创建Period类型对象是基于年、月、日和周,通过下面方法:
Period fromUnits = Period.of(3, 10, 10);
Period fromDays = Period.ofDays(50);
Period fromMonths = Period.ofMonths(5);
Period fromYears = Period.ofYears(10);
Period fromWeeks = Period.ofWeeks(40);assertEquals(280, fromWeeks.getDays());
如果仅一个值表示,如使用ofDays()方法,那么其他值为0;当使用ofWeeks()方法时,则其参数值可以设置天数为参数乘以7。
我们也可以通过解析文本序列来创建Period,其格式为“PnYnMnD”:
Period fromCharYears = Period.parse("P2Y");
assertEquals(2, fromCharYears.getYears());Period fromCharUnits = Period.parse("P2Y3M5D");
assertEquals(5, fromCharUnits.getDays());
period的值可以通过plusX()、minusX()方法进行增加或减少,其中X表示日期单元:
assertEquals(56, period.plusDays(50).getDays());
assertEquals(9, period.minusMonths(2).getMonths());
Duration 类
Duration类表示秒或纳秒时间间隔,适合处理较短的时间,需要更高的精确性。我们能使用between()方法比较两个瞬间的差:
Instant start = Instant.parse("2017-10-03T10:15:30.00Z");
Instant end = Instant.parse("2017-10-03T10:16:30.00Z");Duration duration = Duration.between(start, end);
那么我们能使用getSeconds() 或 getNanoseconds() 方法获取时间单元的值:
assertEquals(60, duration.getSeconds());
我们也可以通过LocalDateTime 类获取获取Duration对象:
LocalTime start = LocalTime.of(1, 20, 25, 1024);
LocalTime end = LocalTime.of(3, 22, 27, 1544);Duration.between(start, end).getSeconds();
isNegative()方法能用于验证后面时间是否大于前面时间:
assertFalse(duration.isNegative());
我们能基于下面的方法获得Duration对象,ofDays(), ofHours(), ofMillis(), ofMinutes(), ofNanos(), ofSeconds():
Duration fromDays = Duration.ofDays(1);
assertEquals(86400, fromDays.getSeconds());Duration fromMinutes = Duration.ofMinutes(60);
当然也可以通过文本序列创建Duration对象,格式为 “PnDTnHnMn.nS”:
Duration fromChar1 = Duration.parse("P1DT1H10M10.5S");
Duration fromChar2 = Duration.parse("PT10M");
可以使用toDays(), toHours(), toMillis(), toMinutes()方法把Duration对象可以转成其他时间单元:
assertEquals(1, fromMinutes.toHours());
也可以通过 plusX()、minusX()方法增加或减少Duration对象,其中X表示days, hours, millis, minutes, nanos 或 seconds:
assertEquals(120, duration.plusSeconds(60).getSeconds());
assertEquals(30, duration.minusSeconds(30).getSeconds());
也可以使用plus()和minus()方法带TemporalUnit 类型参数进行加减:
assertEquals(120, duration.plus(60, ChronoUnit.SECONDS).getSeconds());
assertEquals(30, duration.minus(30, ChronoUnit.SECONDS).getSeconds());
总结
本文我们介绍了java 8 中Period 和 Duration类,并通过实例介绍了其常用方法。
介绍java 8 的 Period 和 Duration 类相关推荐
- java的equals方法_Java Duration类| 带示例的equals()方法
java的equals方法 持续时间类equals()方法 (Duration Class equals() method) equals() method is available in java. ...
- JAVA时间存储类Period和Duration
JAVA时间存储类Period和Duration 前言 在JDK1.8中区分了时间和日期的概念,所以有了两个对应的类,LocalDate和LocalTime,区别如下 LocalDate表示日期,不会 ...
- Java: LocalDate、LocalDateTime、Duration、Period、TimeUnit类的一些用法
一.LocalDate 初始化操作 // 获取当前年月日 LocalDate now = LocalDate.now(); System.out.println(now); // 2021-03-13 ...
- Dete类,Calendar类,Clock类,Instant类,Localtime类,Duration类,LocalDate类,Period类的特性(1)
一.各类的优缺点 1. Date类 优点:简单易用,可以进行基本的日期和时间计算. 缺点:已经过时,精度只能到毫秒级别,不支持时区设置. 2. Calendar类 优点:可以进行日期和时间的计算,支持 ...
- Java中的13个原子操作类介绍
一.引言 在 JDK1.5 中新增 java.util.concurrent(J.U.C) 包,它建立在 CAS 之上.CAS 是非阻塞算法的一种常见实现,相对于 synchronized 这种阻塞算 ...
- JDK 1.8中Instant时间戳类,Duration类,Period类,等一些与事件相关的类和接口
Instant时间戳类 (一)含义:从1970-01-01 00:00:00到当前时间的毫秒值 (二)常用的方法: now(): 获取当前的时间,获取的是当前的美国时间,和处于东八区的我们相差八个小 ...
- 【Java】7.3 基本类 7.4 Java 8 的日期、时间类
目录 String.StringBuffer和StringBuilder类 Rondom类 BigDecimal类 Java 8 新增的日期.时间包 String.StringBuffer和Strin ...
- Java8中使用以下类计算日期时间差:Period、Duration、ChronoUnit
一.简述 在Java8中,我们可以使用以下类来计算日期时间差异: 1.Period 2.Duration 3.ChronoUnit 二.Period类 主要是Period类方法getYears(),g ...
- Java基础巩固(一)类,接口,枚举,常用API,集合,泛型,正则,数据结构
一.static.final.权限关键字,代码块,接口,枚举 1 关键字 2 代码块 3 接口 4 枚举 idea快捷键 shift + enter 换行 ctrl + Alt + shift + U ...
- java 为什么有匿名类_全面了解Java中的内部类和匿名类
Java内部类(Inner Class),类似的概念在C++里也有,那就是嵌套类(Nested Class),乍看上去内部类似乎有些多余,它的用处对于初学者来说可能并不是那么显著,但是随着对它的深入了 ...
最新文章
- npm安装出错Unexpected end of input at 1:2307
- Linux 底层原理 —— epoll 与多路复用
- 老师,你确定注释不会被执行吗?
- python中相对路径下文件的读取
- web worker 的传值方式以及耗时对比
- AutoCad2012安装与使用
- 一级域名二级域名区别
- 服务器硬盘噪音大怎么回事,东芝服务器硬盘响声大吗?
- C# Word 文档保护
- android 画布清屏,html5清空画布方法(三种)
- 今日,华为重磅发布6大创新产品及服务!
- Three.js基础探寻七——Lamber材质与Phong材质
- 3d打印英语文献_3D打印合集,从设计,技术到工业制造应用!
- Python爬虫学习笔记
- max3490esa_MAX1661EUB-T_maxim芯片后缀tg16是什么意思
- 日语输入法促音和长音的输入
- 解决IDEA不能自动导包的问题
- 什么是元认知?其效果和锻炼方法的介绍!
- 手把手教!搭建自己的免费服务器
- Nwafu-OJ-1428 Problem Y C语言实习题五——3.数据倒置
热门文章
- macbook打开网页慢解决办法
- win10去掉快捷方式小箭头_快捷方式小箭头很烦人 一招教你取消
- Windows出现“未连接到互联网代理服务器出现问题,或者地址有误。问题解决办法”
- UiPath 网页元素识别
- 【Python游戏】Python版本的雷霆战机游戏,最新最简单版本来了
- 忆过去 想未来 人有情
- 烟花背景的3D打字魔方相册(末尾附加下载地址)
- 服务器编程之路:进无止境(下)
- Doxygen错误error:failed to run html help compiler on index.hhp
- Back Channel笔记