1.Period

final修饰,线程安全,ISO-8601日历系统中基于日期的时间量,例如2年3个月4天。

主要属性:年数,月数,天数。

    /**
* The number of years.
*/
private final int years;
/**
* The number of months.
*/
private final int months;
/**
* The number of days.
*/
private final int days;

用于时间量,比较2个日期。

例如:

     LocalDate localDate1 = LocalDate.of(2019, 11, 15);
LocalDate localDate2 = LocalDate.of(2020, 1, 1);
Period p = Period.between(localDate1, localDate2);
System.out.println("years:"+p.getYears()+" months:"+p.getMonths()+" days:"+p.getDays());

输出:

years:0 months:1 days:17

2.Duration

final修饰,线程安全,基于时间的时间量,如“34.5秒”。

主要属性:秒,纳秒

    /**
* The number of seconds in the duration.
*/
private final long seconds;
/**
* The number of nanoseconds in the duration, expressed as a fraction of the
* number of seconds. This is always positive, and never exceeds 999,999,999.
*/
private final int nanos;

用于时间量,比较2个时间。

例如:

        LocalDateTime localDateTime1 = LocalDateTime.of(2019, 11, 15, 0, 0);
LocalDateTime localDateTime2 = LocalDateTime.of(2019, 11, 15, 10, 30);
Duration d = Duration.between(localDateTime1, localDateTime2);
System.out.println("days:"+d.toDays());
System.out.println("hours:"+d.toHours());
System.out.println("minutes:"+d.toMinutes());
System.out.println("millis:"+d.toMillis());

输出:

days:0
hours:10
minutes:630
millis:37800000

3.Period和Duration的区别

(1)包含属性不同

Period包含年数,月数,天数,而Duration只包含秒,纳秒。

Period只能返回年数,月数,天数;Duration可以返回天数,小时数,分钟数,毫秒数等。

(2)between方法可以使用的类型不同

Period只能使用LocalDate,Duration可以使用所有包含了time部分且实现了Temporal接口的类,比如LocalDateTime,LocalTime和Instant等。

Period:

public static Period between(LocalDate startDateInclusive, LocalDate endDateExclusive)

Duration:

public static Duration between(Temporal startInclusive, Temporal endExclusive)

(3)between获取天数差的区别

通过上面的实例可以看出:

Period  p.getDays()  获取天数时,只会获取days属性值,而不会将年月部分都计算成天数,不会有2020.1.1和2019.1.1比较后获取天数为365天的情况。

    public int getDays() {
return days;
}

Duration d.toDays()  获取天数时,会将秒属性转换成天数。

    public long toDays() {
return seconds / SECONDS_PER_DAY;
}

所以,想要获取2个时间的相差总天数,只能用Duration。

(4)Period有获取总月数的方法,为什么没有获取总天数方法?

Period有获取总月数的方法:

    public long toTotalMonths() {
return years * 12L + months; // no overflow
}

为什么没有获取总天数方法?

因为between后获取到的Period,不会记录2个日期中间的闰年信息,有闰年的存在,每年的天数不一定是365天,所以计算不准确。

Java日期时间API系列9-----Jdk8中java.time包中的新的日期时间API类的Period和Duration的区别的更多相关文章

  1. 在swt中获取jar包中的文件 uri is not hierarchical

    uri is not hierarchical 学习了:http://blog.csdn.net/zdsdiablo/article/details/1519719 在swt中获取jar包中的文件: ...

  2. API接口自动化之3 同一个war包中多个接口做自动化测试

    同一个war包中多个接口做自动化测试 一个接口用一个测试类,每个测试用例如下,比如下面是4个测试用例,每个详细的测试用例中含有请求入参,返回体校验,以此来判断每条测试用例是否通过 一个war包中,若含 ...

  3. Andriod项目开发实战(1)——如何在Eclipse中的一个包下建新包

    最开始是想将各个类分门别类地存放在不同的包中,所以想在项目源码包中新建几个不同功能的包eg:utils.model.receiver等,最后的结果应该是下图左边这样的:   很明显建立项目后的架构是上 ...

  4. Mac 如何导出ipa文件中Assets.car包中的切图

    在之前 获取 AppStore 中 应用 的 IPA 包文件(Mac OS 13+)中获取到应用的 IPA 包,可以取出应用的部分图片(如 Logo),如果项目工程中把图片添加到 Assets.xca ...

  5. 【转】Eclipse中查看jar包中的源码

    (简单的方式:通过jd-gui来进行反编译,最简单!,参考我的另一篇博文, 地址:http://www.cnblogs.com/gmq-sh/p/4277991.html) Java Decompil ...

  6. JDK中的Atomic包中的类及使用

    引言 Java从JDK1.5开始提供了java.util.concurrent.atomic包,方便程序员在多线程环境下,无锁的进行原子操作.原子变量的底层使用了处理器提供的原子指令,但是不同的CPU ...

  7. Package.json中dependencies依赖包中^符号和~符号前缀的区别

    刚git了webpack的包发现package.json里面dependencies依赖包的版本号前面的符号有两种,一种是~,一种是^,如下图标记: 然后搜了下在stackoverflow上找到一个比 ...

  8. Java8系列 (六) 新的日期和时间API

    概述 在Java8之前, 我们一般都是使用 SimpleDateFormat 来解析和格式化日期时间, 但它是线程不安全的. @Test public void test() { SimpleDate ...

  9. Java8 新的日期和时间API(笔记)

    LocalDate LocalTime Instant duration以及Period 使用LocalDate和LocalTime //2017-03-20 LocalDate date = Loc ...

随机推荐

  1. kuangbin专题 专题九 连通图 Network UVA - 315

    题目链接:https://vjudge.net/problem/UVA-315 题目:求割点. #include <iostream> #include <cstdio> #i ...

  2. Mysql查看连接数(连接总数、活跃数、最大并发数)

    show variables like '%max_connection%'; set global max_connections=1000;

  3. Android学习10

    SharedPreferences 今天练习了利用SharedPreferences保存登录用户名密码: layout布局: <?xml version="1.0" enco ...

  4. linux安装、使用优化、常用软件

    定制自己的ubuntu桌面系统 一.安装ubuntu 1.下载ubuntu镜像Iso文件 ubuntu官网下载:https://cn.ubuntu.com/download 2.u盘写入 (1)下载U ...

  5. iptables详解(2):四表五链

    关于iptables中“四表五链”,我们今天来好好唠唠: 1.表的概念: 我们把具有相同功能的规则的集合叫做"表",所以说,不同功能的规则,我们可以放置在不同的表中进行管理,而ip ...

  6. 序列化--IOSerialize

    序列化与反序列化 序列化:将对象转换为二进制 反序列化:将二进制转换为对象 作用:传输数据:状态保持(例如应用程序记忆上次关闭时的状态) 注:被序列化对象的类的所有成员也必须被标记为可序列化特性.该类 ...

  7. 关于原生,webapp,hybird(混合)

    链接:https://www.jianshu.com/p/839748d571b2 链接2:https://www.jianshu.com/p/6d5f32aa5dda

  8. 吴裕雄 python 机器学习——模型选择学习曲线learning_curve模型

    import numpy as np import matplotlib.pyplot as plt from sklearn.svm import LinearSVC from sklearn.da ...

  9. List(数组)里面常用的属性和方法

    常用属性: length 长度 reversed 翻转 isEmpty 是否为空 isNotEmpty 是否不为空常用方法: add 增加 addAll 拼接数组 增加多个数据 list.addAll ...

  10. 洛谷 P1076 寻宝(模拟 && 剪枝)

    嗯... 题目链接:https://www.luogu.org/problem/P1076 这道题的题意首先太难理解...并且细节太多... 可以用b[i][j]记录每个指示牌上的数字,a[i][j] ...