时间

java8以前使用的时间很多方法都已经废弃了,而且不是线程安全的,java8提供了一系列的时间类,这些时间类都是线程安全的

LocalDate、LocalTime、LocalDateTime

这三个关于时间的类在使用上都类似

  1. /**
  2. * LocalDate
  3. */
  4. @Test
  5. public void test1() {
  6. LocalDate date1 = LocalDate.now();
  7. System.out.println(date1);//2020-03-30
  8. LocalDate plusYears = date1.plusYears(1);
  9. System.out.println(plusYears);//2021-03-30
  10. LocalDate minusDays = date1.minusDays(2);
  11. System.out.println(minusDays);//2020-03-28
  12. LocalDate date2 = LocalDate.of(2019, 3, 30);
  13. System.out.println(date2.getYear());//2019
  14. }
  15. /**
  16. * LocalTime
  17. */
  18. @Test
  19. public void test2() {
  20. LocalTime now = LocalTime.now();
  21. System.out.println(now);//21:15:23.418
  22. int minute = now.getMinute();
  23. System.out.println(minute);//15
  24. int second = now.getSecond();
  25. System.out.println(second);//23
  26. LocalTime of = LocalTime.of(10, 10, 10);
  27. System.out.println(of);//10:10:10
  28. LocalTime minusMinutes = of.minusMinutes(2);
  29. System.out.println(minusMinutes);//10:08:10
  30. LocalTime plusHours = of.plusHours(2);
  31. System.out.println(plusHours);//12:10:10
  32. }
  33. /**
  34. * LocalDateTime
  35. */
  36. @Test
  37. public void test3() {
  38. LocalDateTime now = LocalDateTime.now();
  39. System.out.println(now);//2020-03-30T21:20:37.961
  40. int minute = now.getMinute();
  41. System.out.println(minute);//20
  42. LocalDateTime plusMinutes = now.plusMinutes(20);
  43. System.out.println(plusMinutes);//2020-03-30T21:40:37.961
  44. LocalDateTime minusYears = now.minusYears(2);
  45. System.out.println(minusYears);//2018-03-30T21:20:37.961
  46. LocalDateTime of = LocalDateTime.of(2021, 3, 30, 21, 19, 50);
  47. System.out.println(of);//2021-03-30T21:19:50
  48. }

时间戳

  1. /**
  2. * Instant
  3. */
  4. @Test
  5. public void test4() {
  6. Instant now = Instant.now();
  7. System.out.println(now);//2020-03-30T13:26:10.640Z
  8. Instant plusSeconds = now.plusSeconds(10);
  9. System.out.println(plusSeconds);//2020-03-30T13:26:20.640Z
  10. //获取时间戳相对于1970年0时0分0秒的毫秒数
  11. long epochMilli = plusSeconds.toEpochMilli();
  12. System.out.println(epochMilli);//1585574780640
  13. }

Duration获取时间间隔

  1. /**
  2. * Duration
  3. */
  4. @Test
  5. public void test5() {
  6. Instant start = Instant.now();
  7. Instant end = start.plusSeconds(10);
  8. Duration duration = Duration.between(start, end);
  9. long seconds = duration.getSeconds();
  10. //获取时间间隔的秒数
  11. System.out.println(seconds);//10
  12. //获取时间间隔的毫秒数
  13. long millis = duration.toMillis();
  14. System.out.println(millis);//10000
  15. }

Peroid获取日期间隔

  1. @Test
  2. public void test6() {
  3. LocalDate date1 = LocalDate.now();
  4. LocalDate date2 = date1.plusYears(2);
  5. Period period = Period.between(date1, date2);
  6. //获取两时间间隔的月数,指两个月份的间隔数,并不是时间间隔的总月数
  7. int months = period.getMonths();
  8. System.out.println(months);//0
  9. }

TemporalAdjuster矫正日期

  1. @Test
  2. public void test7() {
  3. LocalDate date1 = LocalDate.now();
  4. System.out.println(date1);//2020-03-31
  5. //TemporalAdjusters类中封装了一些常用地时间矫正方法
  6. TemporalAdjuster next = TemporalAdjusters.next(DayOfWeek.FRIDAY);
  7. LocalDate date2 = date1.with(next);
  8. System.out.println(date2);//2020-04-03
  9. //自定义时间矫正器
  10. LocalDate date3 = date1.with(x->{
  11. LocalDate ld=(LocalDate)x;
  12. DayOfWeek dayOfWeek = ld.getDayOfWeek();
  13. if(dayOfWeek.equals(DayOfWeek.FRIDAY)) {
  14. return ld.plusDays(3);
  15. }else if(dayOfWeek.equals(DayOfWeek.SATURDAY)) {
  16. return ld.plusDays(2);
  17. }else {
  18. return ld.plusDays(1);
  19. }
  20. });
  21. System.out.println(date3);//2020-04-01
  22. }

由于TemporalAdjuster是一个函数式接口,所以我们可以使用lambda表达式自定义矫正规则

  1. @FunctionalInterface
  2. public interface TemporalAdjuster {
  3. Temporal adjustInto(Temporal temporal);
  4. }

DateTimeFormatter格式化日期时间

  1. @Test
  2. public void test8() {
  3. LocalDateTime dateTime1 = LocalDateTime.now();
  4. System.out.println(dateTime1);//2020-03-31T18:28:04.256
  5. DateTimeFormatter formatter1 = DateTimeFormatter.ISO_DATE;
  6. String format1 = dateTime1.format(formatter1);
  7. System.out.println(format1);//2020-03-31
  8. DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("yyyy年MM月dd日HH时mm分ss秒");
  9. String format2 = dateTime1.format(formatter2);
  10. System.out.println(format2);//2020年03月31日18时28分04秒
  11. LocalDateTime dateTime2 = LocalDateTime.parse(format2, formatter2);
  12. System.out.println(dateTime2);//2020-03-31T18:28:04
  13. }

ZoneDate

  1. @Test
  2. public void test9() {
  3. //获取可用时区
  4. ZoneId.getAvailableZoneIds().forEach(System.out::println);
  5. LocalDate date1 = LocalDate.now(ZoneId.of("Asia/Tokyo"));
  6. System.out.println(date1);//2020-03-31
  7. }

ZoneTime

  1. @Test
  2. public void test10() {
  3. LocalTime time1 = LocalTime.now(ZoneId.of("Asia/Tokyo"));
  4. System.out.println(time1);//19:44:15.228
  5. OffsetTime atOffset = time1.atOffset(ZoneOffset.ofHours(2));
  6. System.out.println(atOffset);//19:44:15.228+02:00
  7. }

ZoneDateTime

  1. @Test
  2. public void test11() {
  3. LocalDateTime dateTime1 = LocalDateTime.now(ZoneId.of("Asia/Shanghai"));
  4. System.out.println(dateTime1);//2020-03-31T18:51:07.136
  5. ZonedDateTime atZone = dateTime1.atZone(ZoneId.of("Asia/Shanghai"));
  6. System.out.println(atZone);//2020-03-31T18:51:07.136+08:00[Asia/Shanghai] +09:00表示时间比格林尼治时间快9小时
  7. }

java新时间类的更多相关文章

  1. Java 线程安全LocalTime 和LocaldateTime 新的Date和Time类 -JDK8新时间类的简单使用

    不可变类且线程安全 LocalDate .java.time.LocalTime 和LocaldateTime  新的Date和Time类 DateTimeFormatter ==https://ww ...

  2. Java中时间类中的Data类与Time类

    小简博客 - 小简的技术栈,专注Java及其他计算机技术.互联网技术教程 (ideaopen.cn) Data类 Data类中常用方法 boolean after(Date date) 若当调用此方法 ...

  3. Java基础-时间类

    关于java中六个时间类的使用和区别 java.util.Date java.sql.Date ,java.sql.Time , java.sql.Timestamp java.text.Simple ...

  4. Java日期时间类

    日期时间类有三种: 一.java.util.Date:一般用于声明日期时间类型的变量. 二.java.sql.Date:一般用于数据库日期时间的映射. 三.java.util.Calendar:一般用 ...

  5. Java LocalDateTime,DateTimeFomatter----JDK8新时间类的简单使用

    JDK8中增加了一系列时间的类, (据说)是为了干掉过去的Date,Calendar类的, 过去的Date类(据说)有着线程不安全等诸多弊端, 至于我的个人感受就是用起来实在是很麻烦,我一般封装成几个 ...

  6. Java学习 时间类 Period类与Duration类 / LocalDate类与Instant类 用法详解

    前言 java 8 中引入的两个与日期相关的新类:Period 和 Duration.两个类看表示时间量或两个日期之间的差,两者之间的差异为:Period基于日期值,而Duration基于时间值.他们 ...

  7. springboot Thymeleaf中格式化jsr310新日期时间类(LocalDateTime,LocalDate)--thymeleaf格式化LocalDateTime,LocalDate等JDK8新时间类

    依赖maven包 <dependency> <groupId>org.thymeleaf.extras</groupId> <artifactId>th ...

  8. java最全时间类及用法

    对于时间类,这篇主要说明各种现实情况下如何取值,怎么定向取值,得到自己想要的时间参数.在java中时间类主要有Date.Calendar,暂时只介绍 java.util.*下的时间类,对于java.s ...

  9. java时间类Date、Calendar及用法

    对于时间类,这篇主要说明各种现实情况下如何取值,怎么定向取值,得到自己想要的时间参数.在java中时间类主要有Date.Calendar,暂时只介绍 java.util.*下的时间类,对于java.s ...

随机推荐

  1. Flutter调研(2)-Flutter从安装到运行成功的一些坑

    工作需要,因客户端有部分页面要使用flutter编写,需要QA了解一下flutter相关知识,因此,做了flutter调研,包含安装,基础知识与demo编写,第二部分是安装与环境配置. —— 在mac ...

  2. FPGA小白学习之路(1) System Verilog的概念以及与verilog的对比(转)

    转自CSDN:http://blog.csdn.net/gtatcs/article/details/8970489 SystemVerilog语言简介 SystemVerilog是一种硬件描述和验证 ...

  3. python基础-基本概念

    python概念介绍 python是一门动态解释型的强类型定义语言,创始人吉多·范罗苏姆(Guido van Rossum) #编译型语言 编译型:一次性将所有程序编译成二进制文件 缺点:开发效率低, ...

  4. Python基本小程序

    目录 Python基本小程序 一.筛选从1-100所有的奇数 二.筛选从0-100所有的偶数 三.求1-100之间所有的偶数和,奇数和 四.三个数由小到大输出 五.四个数字重复数字的三位数 Pytho ...

  5. 从0开发3D引擎(十一):使用领域驱动设计,从最小3D程序中提炼引擎(第二部分)

    目录 上一篇博文 本文流程 回顾上文 解释基本的操作 开始实现 准备 建立代码的文件夹结构,约定模块文件的命名规则 模块文件的命名原则 一级和二级文件夹 api_layer的文件夹 applicati ...

  6. 全网最详细的一篇Flutter 尺寸限制类容器总结

    Flutter中尺寸限制类容器组件包括ConstrainedBox.UnconstrainedBox.SizedBox.AspectRatio.FractionallySizedBox.Limited ...

  7. 前端每日实战:152# 视频演示如何用纯 CSS 创作一个圆点错觉效果

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/gBwzKR 可交互视频 此视频是可 ...

  8. 细说集群技术(Cluster)

    今天本人给大家讲解一些我对集群技术一个理解,如有不对的或者讲的不好的可以多多提出,我会进行相应的更改,先提前感谢提出意见的各位了!!! 集群(Cluster)技术:通过此可以用较低的成本获取较高的性能 ...

  9. eetcode必要技巧--动态规划(一)

    首先我们要搞清楚什么是动态规划 动态规划是运筹学中用于求解决策过程中的最优化数学方法.当然,我们在这里关注的是作为一种算法设计技术,作为一种使用多阶段决策过程最优的通用方法. 当然这个很难理解,但是按 ...

  10. 浅谈Java开发三层架构

    三层架构,一般来说就是将整个业务应用划分为:表现层(UI).业务逻辑层(BLL).数据访问层(DAL).区分层次的目的即为了“高内聚,低耦合”的思想. 概念简介 1.表现层(UI):简单来说,就是展现 ...