前言

java 8 中引入的两个与日期相关的新类:Period 和 Duration。两个类看表示时间量或两个日期之间的差,两者之间的差异为:Period基于日期值,而Duration基于时间值。他们估计最大的作用就不需要你自己复杂的计算关于年龄的年数与余天.

Period类与Duration类都是一段持续时间的概念,如果需要对比时间他们就需要一个固定的时间值所以就需要 LocalDate类与Instant类来配合他们使用:

Period 对应使用 LocalDate  他们的作用范围域都是日期(年/月/日)

Duration 对应使用 Instant 他们的作用范围域都是时间(天/时/分/秒/毫秒/纳秒)

LocalDate

精度到日期记录固定时间值的LocalDate,创建方式:

LocalDate localDate1 = LocalDate.of(2019,9,1);
LocalDate localDate2 = LocalDate.ofYearDay(2019,150);

Period

对比时间

LocalDate start = LocalDate.of(2019,9,25);
LocalDate end = LocalDate.of(2019,9,29);
Period period = Period.between(start, end);
Log.e(TAG, "onClick: 天数="+period.getDays());

Instant

以精度到纳秒记录固定的时间值的Instant,创建方式:

Instant instant1 = Instant.parse("2017-10-03T10:15:30.00Z");//用解析字符串的形式创建
Instant instant2 = Instant.ofEpochMilli(System.currentTimeMillis());//用传入单位为毫秒的时间戳创建
Instant instant3 = Instant.ofEpochSecond(System.currentTimeMillis()/1000);//用传入为单位秒的时间戳创建
Instant instant4 = Instant.EPOCH; //获取一个1970纪元年0时的时间

以上代码都是创建了某个时间点的值

Duration

Duration字面意思是持续时间,  注意! 在Android中使用,因为Duration是Java 8才引入的,使用Android需要最低API26才能使用

  设置指定单位的持续时间

Duration durationDays = Duration.ofDays(1);//天
Duration durationHours = Duration.ofHours(1);//小时
Duration durationMinutes = Duration.ofMinutes(1);//分
Duration durationSeconds = Duration.ofSeconds(1);//秒
Duration durationMillis = Duration.ofMillis(1);//毫秒

以上操作可以实例一个指定时间值的Duration.不要急,这是需要结合下面的 获取指定单位时间来使用的.

  获取指定单位的持续时间

                    Duration duration = Duration.ofDays(1);//设置一天时间
long timeHours = duration.toHours();//小时
long timeMinutes = duration.toMinutes();//分钟
long timeMillis = duration.toMillis();//毫秒
long timeNanos = duration.toNanos();//纳秒
String timeString = duration.toString(); //此持续时间的字符串表示形式,使用基于ISO-8601秒*的表示形式,例如 PT8H6M12.345S
Log.e(TAG, "timeHours时间="+timeHours);
Log.e(TAG, "timeMinutes时间="+timeMinutes);
Log.e(TAG, "timeMillis时间="+timeMillis);
Log.e(TAG, "timeNanos时间="+timeNanos);
Log.e(TAG, "timeString时间="+timeString);

结果:

2019-09-29 15:27:33.942 28862-28862/demo_nav.yt.com.demo_nav E/demo.yt.com.demo.MainActivity: timeHours时间=24
2019-09-29 15:27:33.942 28862-28862/demo_nav.yt.com.demo_nav E/demo.yt.com.demo.MainActivity: timeMinutes时间=1440
2019-09-29 15:27:33.942 28862-28862/demo_nav.yt.com.demo_nav E/demo.yt.com.demo.MainActivity: timeMillis时间=86400000
2019-09-29 15:27:33.942 28862-28862/demo_nav.yt.com.demo_nav E/demo.yt.com.demo.MainActivity: timeNanos时间=86400000000000
2019-09-29 15:27:33.942 28862-28862/demo_nav.yt.com.demo_nav E/demo.yt.com.demo.MainActivity: timeString时间=PT24H

  获取2个时间点之间差值的持续时间

long todayTimeMillis = System.currentTimeMillis();
long yesterdayTimeMillis = todayTimeMillis - 24 * 60 * 60 * 1000;
Instant start = Instant.ofEpochMilli(yesterdayTimeMillis);
Instant end = Instant.ofEpochMilli(todayTimeMillis); Duration duration = Duration.between(start, end);
Log.e(TAG, "onClick: 天数="+duration.toDays());

结果:

2019-09-29 16:33:38.063 1830-1830/demo_nav.yt.com.demo_nav E/demo.yt.com.demo.MainActivity: onClick: 天数=1

注意这个天数是可以负数,意味着如果开始时间比结束时间更后面就会得到负数天数

end

Java学习 时间类 Period类与Duration类 / LocalDate类与Instant类 用法详解的更多相关文章

  1. CSS中伪类及伪元素用法详解

    CSS中伪类及伪元素用法详解   伪类的分类及作用: 注:该表引自W3School教程 伪元素的分类及作用: 接下来让博主通过一些生动的实例(之前的作业或小作品)来说明几种常用伪类的用法和效果,其他的 ...

  2. Java语言Socket接口用法详解

    Socket接口用法详解   在Java中,基于TCP协议实现网络通信的类有两个,在客户端的Socket类和在服务器端的ServerSocket类,ServerSocket类的功能是建立一个Serve ...

  3. Java Enum用法详解

    Java Enum用法详解 用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fianl.... .现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举 ...

  4. Java并发编程1--synchronized关键字用法详解

    1.synchronized的作用 首先synchronized可以修饰方法或代码块,可以保证同一时刻只有一个线程可以执行这个方法或代码块,从而达到同步的效果,同时可以保证共享变量的内存可见性 2.s ...

  5. Java 5 的新标准语法和用法详解集锦

    Java 5 的新标准语法和用法详解集锦 Java 5 的新标准语法和用法详解集锦 (需要在首选项-java-complier-compiler compliance level中设置为java5.0 ...

  6. “全栈2019”Java多线程第三十二章:显式锁Lock等待唤醒机制详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  7. Java 注解用法详解——@SuppressWarnings

    转自: https://www.cnblogs.com/fsjohnhuang/p/4040785.html Java魔法堂:注解用法详解——@SuppressWarnings   一.前言 编码时我 ...

  8. java.util.ResourceBundle国际化用法详解

    java.util.ResourceBundle国际化用法详解 初识国际化和ResourceBundle 这个类主要用来解决国际化和本地化问题.国际化和本地化可不是两个概念,两者都是一起出现的.可以说 ...

  9. 【学习笔记】薛定谔的喵咪Cat—球盒问题(全详解)

    [学习笔记]薛定谔的喵咪Cat-球盒问题(全详解) [题目描述] 当一个猫在盒子里时,因为放射物的状态我们不知道,所以猫的状态我们也不知道,这就所谓猫的生死纠缠态,也是所谓的薛定谔的猫. 当我们做需要 ...

  10. java8学习之收集器用法详解与多级分组和分区

    收集器用法详解: 在上次已经系统的阅读了Collector收集器的Javadoc对它已经有一个比较详细的认知了,但是!!!它毕境是只是一个接口,要使用的话还得用它的实现类,所以在Java8中有它进行了 ...

随机推荐

  1. 20140814 explicit

    1.explicit explicit   只对构造函数起作用,用来抑制隐式转换. 如:     class   A   {        A(int   a);   };  int   Functi ...

  2. Struts2入门示例(Myeclipse)

    1.新建Web项目在lib导入struts-2.3.37核心基础jar包 2.在WebRoot新建2个JSP demo1.jsp <%@ page language="java&quo ...

  3. 长度为x的本质不同的串的出现次数 SPOJ - NSUBSTR 后缀自动机简单应用

    题意: 长度为x的本质不同的串的出现次数 题解: 先处理出每一个节点所对应的子串出现的次数 然后取max就好了 #include <set> #include <map> #i ...

  4. ttytype - 终端设备映射的默认终端类型

    DESCRIPTION(描述) /etc/ttytype 文件把termcap/terminfo中的终端类型名与tty行关联起来.每行包括一种终端类型,后面跟着空格,然后是tty名(不带 /dev/ ...

  5. mongo 分片集群的搭建

    MongoDB版本当前使用的MongoDB版本为4.2.0,下载地址.https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2. ...

  6. js求三个数的最大值运算

    js代码: <script> // var num1 = 32, // num2 = 43, // num3 = 98; // if (num1 > num2) { // if (n ...

  7. Comparable和Comparator接口是干什么的?列出它们的区别

    Java提供了只包含一个compareTo()方法的Comparable接口.这个方法可以个给两个对象排序.具体来说,它返回负数,0,正数来表明输入对象小于,等于,大于已经存在的对象. Java提供了 ...

  8. leetcood学习笔记-141-环形列表

    题目描述: 方法一: class Solution(object): def hasCycle(self, head): """ :type head: ListNode ...

  9. java 删除文件

    -------------------------------------对于有多层内容的文件夹来说,要彻底删除的话,就需要编写代码进行迭代操作---------------------------- ...

  10. Batch - FOR %%a %%b

    总结 %%a refers to the name of the variable your for loop will write to. Quoted from for /?: FOR %vari ...