Duration

在JDK8中,可以使用java.time.Duration来计算时间时间差异,通过秒和纳秒相结合来描述一个时间量,最高精度是纳秒。

Duration类通过秒和纳秒相结合来描述一个时间量,最高精度是纳秒。时间量可以为正也可以为负,比如1天(86400秒0纳秒)、-1天(-86400秒0纳秒)、1年(31556952秒0纳秒)、1毫秒(0秒1000000纳秒)等。

创建方法

通过时间单位创建:

ofDays(), ofHours(), ofMillis(), ofMinutes(), ofNanos(), ofSeconds()

eg.

Duration fromDays = Duration.ofDays(1);

通过LocalDateTime或LocalTime

LocalDateTime start = LocalDateTime.of(2022, 1, 1, 8, 0, 0);

LocalDateTime end = LocalDateTime.of(2022, 1, 2, 8, 30, 30);

Duration duration = Duration.between(start, end);

解析方法

Duration fromChar1 = Duration.parse("P1DT1H10M10.5S");

Duration fromChar2 = Duration.parse("PT10M");

格式说明:

P:开始标记

1Y:一年

2M:两个月

10D:十天

T:日期和时间的分割标记

2H:两个小时

30M:三十分钟

15S:15.02秒

1."P", "D", "H", "M" 和 "S"可以是大写或者小写(建议大写)

2.可以用“-”表示负数

比较方法

Instant start = Instant.parse("2017-10-03T10:15:30.00Z");

Instant end = Instant.parse("2017-10-03T10:16:30.00Z");

 

// start - end        

Duration duration = Duration.between(start, end);

 

// 任何一个时间单元为负数,则返回true。true:end早于start

duration.isNegative();

 

Duration.between(start, end).getSeconds();

Duration.between(start, end).getNano();

增减方法

plusX()、minusX()

X表示days, hours, millis, minutes, nanos 或 seconds

Duration duration = Duration.ofHours(2);

Duration newDuration = duration.plus(33, ChronoUnit.SECONDS);

转换单位

可以用getX来获得指定位置的值,因为Duration是由秒和纳秒组成,所以只能获得秒和纳秒:

Duration duration = Duration.ofHours(2);

 

duration.getSeconds();  //7200

duration.getNano();     //

Period

Period类通过年、月、日相结合来描述一个时间量,最高精度是天。时间量可以为正也可以为负,例如2年(2年0个月0天)、3个月(0年3个月0天)、4天(0年0月4天)等。

创建方法

通过时间单位创建:

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);  //280天

通过LocalDate创建:

LocalDate startDate = LocalDate.of(2015, 2, 20);

LocalDate endDate = LocalDate.of(2017, 1, 15);

// startDate减endDate

Period period = Period.between(startDate, endDate);

解析方法

格式1:“PnYnMnWnD”

Period period = Period.parse("P2Y");       //2年

Period period = Period.parse("P2Y3M5D");   //2年3月5天

Period period = Period.parse("P1Y2M3W4D"); // 1年2月3周4天。即:1年2月25天

说明:

P:开始符,表示period(即:表示年月日);

Y:year;

M:month;

W:week;

D:day

P, Y, M, W, D都可以用大写或者小写。

获得年月日

period.getYears();

period.getMonths();

period.getDays();

比较方法

LocalDate startDate = LocalDate.of(2015, 2, 20);

LocalDate endDate = LocalDate.of(2017, 1, 15);

// startDate减endDate

Period period = Period.between(startDate, endDate);

// 任何一个时间单元为负数,则返回true。true:endDate早于startDate

period.isNegative()

增减方法

Period period = Period.parse("P2Y3M5D");

period.plusDays(50);

period.minusMonths(2);

转换单位

Period period = Period.parse("P1Y2M3D");

period.toTotalMonths(); // 14

取值方法

Period period = Period.parse("P1Y2M3D");

period.getYears();  // 1

period.getMonths(); // 2

period.getDays();   // 3

Java Duration类和Period类相关推荐

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

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

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

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

  3. Java基础篇:常用类

    文章目录 1.字符串相关的类 1.1 String类及常用方法 String的特性 String对象的创建 字符串对象是如何存储的 String使用陷阱 String常用方法 1.2 StringBu ...

  4. Java面试知识点:Date类、异常

    问题:Java面试知识点:Date类.异常 答案: 1.Date类 代码如下: (1)创建日期: package com.xy;import java.util.Date;/*** @ProjectN ...

  5. Java高级编程之常用类

    一.String类 java.lang.String类的使用 (一)概述 String: 字符串,使用一对""引起来表示. String声明为final的,不可被继承 String ...

  6. java 根据类名示例化类_Java即时类| plusMillis()方法与示例

    java 根据类名示例化类 即时类plusMillis()方法 (Instant Class plusMillis() method) plusMillis() method is available ...

  7. java 根据类名示例化类_Java即时类| minusNanos()方法与示例

    java 根据类名示例化类 即时类minusNanos()方法 (Instant Class minusNanos() method) minusNanos() method is available ...

  8. java Excel导入导出工具类 及使用demo

    java Excel导入导出工具类 及使用demo 前言:相信进来的都是想尽快解决问题的,话不多说,按照以下步骤来,可以操作导出excel到本地,导入同理,自行学习.步骤一:直接复制以下excel工具 ...

  9. 《Java并发编程的艺术》——Java中的并发工具类、线程池、Execute框架(笔记)

    文章目录 八.Java中的并发工具类 8.1 等待多线程完成的CountDownLatch 8.2 同步屏障CyclicBarrier 8.2.1 CyclicBarrier简介 8.2.2 Cycl ...

  10. Java常用类:时间相关类

    Java常用类:时间相关类 java.util.Date java.util.Calendar java.time 基本废弃,但有一个方法仍在使用 目前程序中最常用的, 是抽象类 Java 8 推出新 ...

最新文章

  1. Ubuntu输入正确的用户名密码不能进入系统的原因和解决方法
  2. 关于read的例子和条件测试
  3. 高效的JavaScript
  4. BLP安全操作系统---道里云公司参展英特尔北京IDF峰会介绍(三)
  5. python卡方检验kf_Python 卡方检验
  6. 彼得•林奇基层调查选股法(GARP股票投资策略)
  7. 马云的“虚拟信用卡”动了谁的奶酪?
  8. Unity Kinect运行 FaceTracking 场景 c++ Runtime Error
  9. vi/vim保存报错:E37: No write since last change E162: No write since last change for buffer “[文件名称]“
  10. Scheme 语言概要(下)
  11. 拉格朗日对偶性(Lagrange duality)
  12. bmi计算器公式_bmi计算公式
  13. 数学笔记13——定积分
  14. linux 系统qcow2镜像制作
  15. 利用Numpy+PIL读取图像实现手绘效果
  16. --仿蓝色理想网站的导航菜单--
  17. mysql5.6 之frm,MYD,MYI,idb,文件说明
  18. Python文件读取read()函数
  19. jQuery toggle 使用
  20. 申万一级行业日指数_申万一级行业指数涨跌幅

热门文章

  1. Mysql 之 缓存更新策略
  2. 侦探系列-照片隐藏信息提取
  3. 合唱队形——线性dp
  4. python 获取网页元素_Python爬虫--解析网页中的元素
  5. 学习编程需要英语很好吗?
  6. 地图学:专题地图制作详细步骤
  7. Event-triggered MPC Design for Distributed Systems With Network Communications
  8. Java程序实现繁体字转换简体字
  9. springcloud如何制作一个物联网产品
  10. 云杰恒指:8.19恒指期货仓位管理---交易复盘