Java Duration类和Period类
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类相关推荐
- Dete类,Calendar类,Clock类,Instant类,Localtime类,Duration类,LocalDate类,Period类的特性(1)
一.各类的优缺点 1. Date类 优点:简单易用,可以进行基本的日期和时间计算. 缺点:已经过时,精度只能到毫秒级别,不支持时区设置. 2. Calendar类 优点:可以进行日期和时间的计算,支持 ...
- JDK 1.8中Instant时间戳类,Duration类,Period类,等一些与事件相关的类和接口
Instant时间戳类 (一)含义:从1970-01-01 00:00:00到当前时间的毫秒值 (二)常用的方法: now(): 获取当前的时间,获取的是当前的美国时间,和处于东八区的我们相差八个小 ...
- Java基础篇:常用类
文章目录 1.字符串相关的类 1.1 String类及常用方法 String的特性 String对象的创建 字符串对象是如何存储的 String使用陷阱 String常用方法 1.2 StringBu ...
- Java面试知识点:Date类、异常
问题:Java面试知识点:Date类.异常 答案: 1.Date类 代码如下: (1)创建日期: package com.xy;import java.util.Date;/*** @ProjectN ...
- Java高级编程之常用类
一.String类 java.lang.String类的使用 (一)概述 String: 字符串,使用一对""引起来表示. String声明为final的,不可被继承 String ...
- java 根据类名示例化类_Java即时类| plusMillis()方法与示例
java 根据类名示例化类 即时类plusMillis()方法 (Instant Class plusMillis() method) plusMillis() method is available ...
- java 根据类名示例化类_Java即时类| minusNanos()方法与示例
java 根据类名示例化类 即时类minusNanos()方法 (Instant Class minusNanos() method) minusNanos() method is available ...
- java Excel导入导出工具类 及使用demo
java Excel导入导出工具类 及使用demo 前言:相信进来的都是想尽快解决问题的,话不多说,按照以下步骤来,可以操作导出excel到本地,导入同理,自行学习.步骤一:直接复制以下excel工具 ...
- 《Java并发编程的艺术》——Java中的并发工具类、线程池、Execute框架(笔记)
文章目录 八.Java中的并发工具类 8.1 等待多线程完成的CountDownLatch 8.2 同步屏障CyclicBarrier 8.2.1 CyclicBarrier简介 8.2.2 Cycl ...
- Java常用类:时间相关类
Java常用类:时间相关类 java.util.Date java.util.Calendar java.time 基本废弃,但有一个方法仍在使用 目前程序中最常用的, 是抽象类 Java 8 推出新 ...
最新文章
- Ubuntu输入正确的用户名密码不能进入系统的原因和解决方法
- 关于read的例子和条件测试
- 高效的JavaScript
- BLP安全操作系统---道里云公司参展英特尔北京IDF峰会介绍(三)
- python卡方检验kf_Python 卡方检验
- 彼得•林奇基层调查选股法(GARP股票投资策略)
- 马云的“虚拟信用卡”动了谁的奶酪?
- Unity Kinect运行 FaceTracking 场景 c++ Runtime Error
- vi/vim保存报错:E37: No write since last change E162: No write since last change for buffer “[文件名称]“
- Scheme 语言概要(下)
- 拉格朗日对偶性(Lagrange duality)
- bmi计算器公式_bmi计算公式
- 数学笔记13——定积分
- linux 系统qcow2镜像制作
- 利用Numpy+PIL读取图像实现手绘效果
- --仿蓝色理想网站的导航菜单--
- mysql5.6 之frm,MYD,MYI,idb,文件说明
- Python文件读取read()函数
- jQuery toggle 使用
- 申万一级行业日指数_申万一级行业指数涨跌幅