介绍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 类相关推荐

  1. java的equals方法_Java Duration类| 带示例的equals()方法

    java的equals方法 持续时间类equals()方法 (Duration Class equals() method) equals() method is available in java. ...

  2. JAVA时间存储类Period和Duration

    JAVA时间存储类Period和Duration 前言 在JDK1.8中区分了时间和日期的概念,所以有了两个对应的类,LocalDate和LocalTime,区别如下 LocalDate表示日期,不会 ...

  3. Java: LocalDate、LocalDateTime、Duration、Period、TimeUnit类的一些用法

    一.LocalDate 初始化操作 // 获取当前年月日 LocalDate now = LocalDate.now(); System.out.println(now); // 2021-03-13 ...

  4. Dete类,Calendar类,Clock类,Instant类,Localtime类,Duration类,LocalDate类,Period类的特性(1)

    一.各类的优缺点 1. Date类 优点:简单易用,可以进行基本的日期和时间计算. 缺点:已经过时,精度只能到毫秒级别,不支持时区设置. 2. Calendar类 优点:可以进行日期和时间的计算,支持 ...

  5. Java中的13个原子操作类介绍

    一.引言 在 JDK1.5 中新增 java.util.concurrent(J.U.C) 包,它建立在 CAS 之上.CAS 是非阻塞算法的一种常见实现,相对于 synchronized 这种阻塞算 ...

  6. JDK 1.8中Instant时间戳类,Duration类,Period类,等一些与事件相关的类和接口

    Instant时间戳类 (一)含义:从1970-01-01 00:00:00到当前时间的毫秒值 (二)常用的方法:  now(): 获取当前的时间,获取的是当前的美国时间,和处于东八区的我们相差八个小 ...

  7. 【Java】7.3 基本类 7.4 Java 8 的日期、时间类

    目录 String.StringBuffer和StringBuilder类 Rondom类 BigDecimal类 Java 8 新增的日期.时间包 String.StringBuffer和Strin ...

  8. Java8中使用以下类计算日期时间差:Period、Duration、ChronoUnit

    一.简述 在Java8中,我们可以使用以下类来计算日期时间差异: 1.Period 2.Duration 3.ChronoUnit 二.Period类 主要是Period类方法getYears(),g ...

  9. Java基础巩固(一)类,接口,枚举,常用API,集合,泛型,正则,数据结构

    一.static.final.权限关键字,代码块,接口,枚举 1 关键字 2 代码块 3 接口 4 枚举 idea快捷键 shift + enter 换行 ctrl + Alt + shift + U ...

  10. java 为什么有匿名类_全面了解Java中的内部类和匿名类

    Java内部类(Inner Class),类似的概念在C++里也有,那就是嵌套类(Nested Class),乍看上去内部类似乎有些多余,它的用处对于初学者来说可能并不是那么显著,但是随着对它的深入了 ...

最新文章

  1. npm安装出错Unexpected end of input at 1:2307
  2. Linux 底层原理 —— epoll 与多路复用
  3. 老师,你确定注释不会被执行吗?
  4. python中相对路径下文件的读取
  5. web worker 的传值方式以及耗时对比
  6. AutoCad2012安装与使用
  7. 一级域名二级域名区别
  8. 服务器硬盘噪音大怎么回事,东芝服务器硬盘响声大吗?
  9. C# Word 文档保护
  10. android 画布清屏,html5清空画布方法(三种)
  11. 今日,华为重磅发布6大创新产品及服务!
  12. Three.js基础探寻七——Lamber材质与Phong材质
  13. 3d打印英语文献_3D打印合集,从设计,技术到工业制造应用!
  14. Python爬虫学习笔记
  15. max3490esa_MAX1661EUB-T_maxim芯片后缀tg16是什么意思
  16. 日语输入法促音和长音的输入
  17. 解决IDEA不能自动导包的问题
  18. 什么是元认知?其效果和锻炼方法的介绍!
  19. 手把手教!搭建自己的免费服务器
  20. Nwafu-OJ-1428 Problem Y C语言实习题五——3.数据倒置

热门文章

  1. macbook打开网页慢解决办法
  2. win10去掉快捷方式小箭头_快捷方式小箭头很烦人 一招教你取消
  3. Windows出现“未连接到互联网代理服务器出现问题,或者地址有误。问题解决办法”
  4. UiPath 网页元素识别
  5. 【Python游戏】Python版本的雷霆战机游戏,最新最简单版本来了
  6. 忆过去 想未来 人有情
  7. 烟花背景的3D打字魔方相册(末尾附加下载地址)
  8. 服务器编程之路:进无止境(下)
  9. Doxygen错误error:failed to run html help compiler on index.hhp
  10. Back Channel笔记