前言

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. Html+css编写太阳星系

    我们都知道太阳系是以太阳为中心的,和所有受到太阳的引力约束天体的集合体.包括八大行星(由离太阳从近到远的顺序:水星.金星.地球.火星.木星.土星.天王星.海王星),而我用html和css所写的就是八大 ...

  2. win10无法设置移动热点的一种解决办法

    我的笔记本网卡为:Intel(R) Centrino(R) Wireless-N 2230 最近发现win10自带的移动热点无法启动了,一直显示无法设置热点 参考网上的教程,例如http://jing ...

  3. one-hot encoding与哑变量的区别

    one-hot encoding与哑变量的区别 one-hot比哑变量的特征位多一位,即哑变量是精简版的one-hot,即在线性回归中用截距项来表示最后一维,但由于最初很难分辨特征的主次关系,且机器学 ...

  4. vue 中使用 lazyload 插件 数据更图片不更新 的原因 及解决方案

    在使用lazyload插件的img标签上,加上:key标识即可

  5. Sql Server 小知识不断扩充中

    1.  char.varchar.nvarchar 区别 char 定长字符数据长度8000字符,小于8000字符时以空格填充. varchar 变长字符数据最大长度8000,小于8000字符时不会以 ...

  6. C++11中的技术剖析(std bind原理简单图解)

    此文为转载,好像原出处的原文已经无法打开了. 本文解释了bind 是如何工作的.为了清晰,我对图中的语法作了一些简化(例如,省略函数调用操作符的参数类型),并且简化了 bind 的实现. bind 可 ...

  7. flume的安装和使用

    1.下载 [linyouyi@hadoop01 software]$ wget https://mirrors.aliyun.com/apache/flume/1.9.0/apache-flume-1 ...

  8. [JZOJ 5804] 简单的序列

    思路: 似乎和某次培训的题很像啊... 将左括号记为1,右括号记为-1,那么最终一定加和为0,然后再求最小前缀和. 用dp解决即可. #include <bits/stdc++.h> us ...

  9. Dijkstra with priority queue 分类: ACM TYPE 2015-07-23 20:12 4人阅读 评论(0) 收藏

    POJ 1511 Invitation Cards(单源最短路,优先队列优化的Dijkstra) //================================================= ...

  10. 拾遗:sed&vim

    一.sed查漏补缺 1.sed x,+y,从第x行的开始,向下连续y行(包含x行在内是y+1行!) f@z ~/testdir $ cat -n x.awk #!/usr/bin/awk -f BEG ...