LocalDate、LocalTime、LocalDateTime 类的实 例是不可变的对象,分别表示使用 ISO-8601日 历系统的日期、时间、日期和时间。

Instant 时间戳, 用于“时间戳”的运算。它是以Unix元年(传统 的设定为UTC时区1970年1月1日午夜时分)开始 所经历的描述进行运算。

直接来看代码吧。

同时新的日期API 也解决了旧日期API在线程中的问题,

  1. package NewTimeP;
  2.  
  3. import org.junit.Test;
  4.  
  5. import java.time.*;
  6. import java.time.format.DateTimeFormatter;
  7. import java.time.temporal.TemporalAdjusters;
  8.  
  9. public class NewTime {
  10.  
  11. public void test() {
  12. //LocalDate LocalTime LocalDateTime
  13. //上面三个是我们可以看得懂的时间,其操作方法是一样的,这里只写一下LocalDateTime的使用方法
  14. LocalDateTime localDateTime = LocalDateTime.now();//得到现在的时间
  15. System.out.println("localDateTime = " + localDateTime);
  16. //localDateTime = 2017-11-30T09:28:23.564
  17.  
  18. //按照指定的时间创建新的对象
  19. LocalDateTime of = LocalDateTime.of(2016, 12, 12, 12, 12, 12, 23);
  20. System.out.println("of = " + of);
  21. //of = 2016-12-12T12:12:12.000000023
  22.  
  23. //在原有基础上加上两年,其他操作时一样的,区别一下LocalDate和LocalTime,他们是各自分别只管年月日和时分秒,所以对应的就只有操作年月日或时分秒的方法
  24. LocalDateTime localDateTime1 = of.plusYears(2);
  25. System.out.println("localDateTime1 = " + localDateTime1);
  26. //localDateTime1 = 2018-12-12T12:12:12.000000023
  27.  
  28. //在原有基础上减去两年
  29. LocalDateTime localDateTime2 = of.minusYears(2);
  30. System.out.println("localDateTime2 = " + localDateTime2);
  31. //localDateTime2 = 2014-12-12T12:12:12.000000023
  32.  
  33. //得到各种年月日时分秒
  34. System.out.println(localDateTime.getYear());
  35. System.out.println(localDateTime.getMonth());//这里是得到了Month的对象,可以对其进行操作的
  36. System.out.println(localDateTime.getMonthValue());//这里就只是返回一个int值
  37. System.out.println(localDateTime.getDayOfMonth());
  38. System.out.println(localDateTime.getDayOfWeek());
  39. System.out.println(localDateTime.getHour());
  40. System.out.println(localDateTime.getMinute());
  41. System.out.println(localDateTime.getSecond());
  42. }
  43.  
  44. public void test1() {
  45. //Instant 时间戳,以1970年一月一日00:00:00到指定时间的毫秒值
  46. Instant instant = Instant.now();//默认获取的是UTC时区时间,世界协调时间,
  47. System.out.println(instant);//2017-11-30T01:36:45.315Z
  48.  
  49. //由于UTC时区与我们的现在的时间相差八个小时,那么我们如果想得到现在的时间就必须做一下偏移量的运算。
  50. //下面的意思是把当前的UTC时区的时间做了八个小时的偏移量运算后返回一个偏移量的时间对象
  51. OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8));
  52. System.out.println("offsetDateTime = " + offsetDateTime);//offsetDateTime = 2017-11-30T09:38:59.003+08:00
  53.  
  54. //得到毫秒值
  55. System.out.println(instant.toEpochMilli());//1512006123574
  56.  
  57. //我们可以看到结果 是在元年上进行添加的操作的!下面的意思是在1970年1月1日00:00:00上加了一秒!
  58. Instant instant1 = Instant.ofEpochSecond(1);
  59. System.out.println("instant1 = " + instant1);//instant1 = 1970-01-01T00:00:01Z
  60. }
  61.  
  62. public void test2() throws InterruptedException {
  63. //Duration:计算两个时间之间的间隔的
  64. Instant now = Instant.now();
  65. Thread.sleep(500);
  66. Instant now1 = Instant.now();
  67. Duration between = Duration.between(now, now1);
  68. System.out.println(between.toMillis());//500 这里需要提醒的是 Duration中的得到各种时间的方法是不一样的,有to啥啥啥还有 get啥啥啥,自己找找吧
  69.  
  70. LocalTime localtime = LocalTime.now();
  71. Thread.sleep(50);
  72. LocalTime now2 = LocalTime.now();
  73. System.out.println(Duration.between(localtime, now2).toMillis());//51 在这的到了Duration也可以进行相加减日期的操作!
  74. }
  75.  
  76. public void test3() throws InterruptedException {
  77.  
  78. //Period计算两个日期之间的间隔
  79. LocalDate of = LocalDate.of(2015, 1, 1);
  80. LocalDate now = LocalDate.now();
  81. Period between = Period.between(of, now);
  82. System.out.println("between = " + between);//between = P2Y10M29D 表示P 两年Y十个月M二十九天D
  83. System.out.println("between = " + between.getYears());//between = 2
  84. System.out.println("between = " + between.getDays());//between = 29
  85. System.out.println("between = " + between.toTotalMonths());//相差三十四个月 between = 34
  86.  
  87. }
  88.  
  89. public void test4() {
  90. //TemporalAdjuster 时间校正器
  91. LocalDateTime localDateTime = LocalDateTime.now();
  92. System.out.println("localDateTime = " + localDateTime);//localDateTime = 2017-11-30T10:01:58.836
  93.  
  94. //指定这个月中的天数
  95. LocalDateTime localDateTime1 = localDateTime.withDayOfMonth(10);
  96. System.out.println("localDateTime1 = " + localDateTime1);//localDateTime1 = 2017-11-10T10:01:58.836
  97. //指定一年中的第几天 那就是 一月一号啊
  98. LocalDateTime localDateTime2 = localDateTime.withDayOfYear(1);
  99. System.out.println("localDateTime2 = " + localDateTime2);//localDateTime2 = 2017-01-01T10:01:58.836
  100.  
  101. //下一个周日
  102. LocalDateTime with = localDateTime.with(TemporalAdjusters.next(DayOfWeek.SUNDAY));
  103. System.out.println("with = " + with);//with = 2017-12-03T10:08:23.938
  104.  
  105. //自定义校正器
  106. //with里面是一个函数式接口,这时候就可以使用Lambda表达式
  107. LocalDateTime with1 = localDateTime.with((e) -> {
  108. LocalDateTime e1 = (LocalDateTime) e;//强转一下
  109. DayOfWeek dayOfWeek = e1.getDayOfWeek();//获取今天是周几
  110. if (dayOfWeek.equals(DayOfWeek.FRIDAY)) {//如果是周五的话,那么就加上三天,加上后就是下周周一的日期
  111. return e1.plusDays(3);
  112. } else if (dayOfWeek.equals(DayOfWeek.THURSDAY)) {//如果是周四的话,那么就加上四天,加上后就是下周周一的日期
  113. return e1.plusDays(4);
  114. }
  115. return null;//其实不应该这么返回的,懒得写了,
  116. });
  117. System.out.println(with1);//2017-12-04T10:17:05.773 周一周一
  118. }
  119.  
  120. public void test5() {
  121. //DateTimeFormatter 格式化日期与时间的。
  122. //在这个类中其实已经提供了好多已经定义好的格式化标准
  123. DateTimeFormatter isoDate = DateTimeFormatter.ISO_DATE;
  124.  
  125. LocalDateTime dateTime = LocalDateTime.now();
  126.  
  127. String format = isoDate.format(dateTime);
  128. System.out.println("format = " + format);//format = 2017-11-30
  129.  
  130. //也可以自己定义
  131. DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
  132. String format1 = dateTimeFormatter.format(dateTime);
  133. System.out.println(format1);//20171130103756
  134.  
  135. //当然如果我们拿到了特定的日期时间格式也可以解析出原来的时间;
  136. //意思就是用一个实例对象去调用parse方法,第一个参数为日期字符串,第二个就是解析的格式
  137. LocalDateTime parse = LocalDateTime.now().parse(format1, dateTimeFormatter);
  138. System.out.println(parse);//2017-11-30T10:40:39
  139. }
  140. @Test
  141. public void test6(){
  142. //时区 ZonedDate ZonedTime ZonedDateTime
  143. LocalDateTime now = LocalDateTime.now(ZoneId.of("Asia/Shanghai"));
  144. System.out.println("now = " + now);//now = 2017-11-30T10:49:40.584
  145.  
  146. LocalDateTime now1 = LocalDateTime.now();
  147. ZonedDateTime zonedDateTime = now1.atZone(ZoneId.of("Asia/Shanghai"));
  148. System.out.println("zonedDateTime = " + zonedDateTime);//zonedDateTime = 2017-11-30T10:51:02.094+08:00[Asia/Shanghai]
  149. }
  150. }

Java--8--新特性--新的日期API的更多相关文章

  1. 【转】Java 8新特性(四):新的时间和日期API

    Java 8另一个新增的重要特性就是引入了新的时间和日期API,它们被包含在java.time包中.借助新的时间和日期API可以以更简洁的方法处理时间和日期. 在介绍本篇文章内容之前,我们先来讨论Ja ...

  2. Java 8新特性(四):新的时间和日期API

    Java 8另一个新增的重要特性就是引入了新的时间和日期API,它们被包含在java.time包中.借助新的时间和日期API可以以更简洁的方法处理时间和日期. 在介绍本篇文章内容之前,我们先来讨论Ja ...

  3. 为什么不建议使用Date,而是使用Java8新的时间和日期API?

    Java 8:新的时间和日期API 在Java 8之前,所有关于时间和日期的API都存在各种使用方面的缺陷,因此建议使用新的时间和日期API,分别从旧的时间和日期的API的缺点以及解决方法.Java ...

  4. Atitit. visual studio vs2003 vs2005 vs2008  VS2010 vs2012 vs2015新特性 新功能.doc

    Atitit. visual studio vs2003 vs2005 vs2008  VS2010 vs2012 vs2015新特性 新功能.doc 1.1. Visual Studio2 1.2. ...

  5. Atitit.mysql 5.0 5.5  5.6 5.7  新特性 新功能

    Atitit.mysql 5.0 5.5  5.6 5.7  新特性 新功能 1. MySQL  5.6    5 大新特性1 1.1. 优化器的改进1 1.2. InnoDB 改进1 1.3. 使用 ...

  6. Atitit.mysql 5.0 5.5  5.6 5.7  新特性 新功能

    Atitit.mysql 5.0 5.5  5.6 5.7  新特性 新功能 1. MySQL  5.6    5 大新特性1 1.1. 优化器的改进1 1.2. InnoDB 改进1 1.3. 使用 ...

  7. 重新想象 Windows 8.1 Store Apps (88) - 通信的新特性: 新的 HttpClient

    [源码下载] 重新想象 Windows 8.1 Store Apps (88) - 通信的新特性: 新的 HttpClient 作者:webabcd 介绍重新想象 Windows 8.1 Store ...

  8. Atitit.linux 内核 新特性 新功能

    Atitit.linux 内核 新特性 新功能 1.  Linux 3.2内核新特性 2012-02-12 22:41:471 1.1. EXT4:支持更大的块2 1.2. BTRFS:更快的数据清理 ...

  9. Java 8新特性(Lambda,Stream API)

    由于最近总监要求学习Java 8的一些知识,就去网上找了 一套教程来学习学习,将学习结果做一个小的总结记录,方便以后使用: 1.Java 8的优点 2.Lambda表达式优点 2.1Lambda实例 ...

  10. Java8新特性——新一套时间API的使用

    JDK 1.0中包含了一个java.util.Date类,但是它的大多数方法已经在JDK 1.1引入Calendar类之后被弃用了.而Calendar并不比Date好多少.它们面临的问题是: 可变性: ...

随机推荐

  1. js object 添加键值

    第一种方法let obj ={"name":"tom","age":16}let key = "id";let valu ...

  2. matlab学习笔记9 高级绘图命令_2 图形的高级控制_视点控制和图形旋转_色图和颜色映像_光照和着色

    一起来学matlab-matlab学习笔记9 高级绘图命令_2 图形的高级控制_视点控制和图形旋转_色图和颜色映像_光照和着色 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 < ...

  3. 【Shell常用命令二】管道符 通配符

    ======================================

  4. V8世界探险 (1) - v8 API概览

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/lusing/article/detai ...

  5. 基于Prometheus+Grafana+AlertManager的监控系统

    一.Prometheus 1.1 简介 Prometheus是一套开源的监控&报警&时间序列数据库的组合,基于应用的metrics来进行监控的开源工具 . 1.2 下载&安装 ...

  6. Apache JMeter 做接口并发测试

    获知来源:查找如何使用Postman进行接口并发测试时,在StackOverflow上看到,说postman只能做串行测试,而且postman并不是被设计做这种测试的:而jmeter就是为了测试而开发 ...

  7. .Net 配置 swagger 使用nginx反向代理后请求带端口号导致无法正常访问---解决方法

    1 webconfig中 appsetting 中增加配置 <appSettings> <add key="aspnet:UseHostHeaderForRequestUr ...

  8. 修复一个mysqlbinlog_flashback不支持json格式问题

    修复一个mysqlbinlog_flashback不支持json格式问题 , 有问题可以反馈留言 , 如下盘: 最简单的例子为 python mysqlbinlog_back.py --host=&q ...

  9. 「中山纪中集训省选组D2T1」书堆 欧拉常数

    题目描述 蚂蚁是勤劳的动物,他们喜欢挑战极限.现在他们迎来了一个难题!蚂蚁居住在图书馆里,图书馆里有大量的书籍.书是形状大小质量都一样的矩形.蚂蚁要把这些书摆在水平桌子的边缘.蚂蚁喜欢整洁的布置,所以 ...

  10. [转帖]UID卡、CUID卡、FUID卡、UFUID卡的区别及写入方式

    UID卡.CUID卡.FUID卡.UFUID卡的区别及写入方式   版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://bl ...