一、使用的原因

在JDK8发布的时候,推出了LocalDate、LocalTime、LocalDateTime这个三个时间处理类,以此来弥补之前的日期时间类的不足,简化日期时间的操作。

在Java8之前,处理日期时间的类是Date、Calendar,这两个在使用起来总是让人感觉不是很舒服,在设计上面有一些缺陷,并且还不是线程安全的。

最重要的一点,公司的重构项目要用到了mybatis-plus框架,这个框架自动生成映射文件的工具会将MySQL中的datetime类型转化成Java中的LocalDateTime类型,由于几次都出现了转化错误、转化繁琐的问题

因此,就打算详细的了解一下Java中的时间类的相关知识

二、科普前置需求

1.了解时区

我们平时在程序里面所见到的UTC时间,就是零时区的时间,它的全称是Coordinated Universal Time ,即世界协调时间。另一个常见的缩写是GMT,即格林威治标准时间

格林威治位于 零时区,因此,我们平时说的UTC时间和GMT时间在数值上面都是一样的。

日常中我们中国基本都是以北京时间为标准,也就是一下图中东八区,这里的一个区基本就是一个小时的时差,

2.由此可以总结

①时间戳: 是指格林威治(地球零时区)时间1970年01月01日00时00分00秒起至现在的总秒数,这个时间戳,在地球的各个地方都是一致的;

②时区:由于地球的自转,根据接收太阳光照的顺序将地球划分成24个区,从而方便当地人的生产生活,每个时区相差一小时,可以根据时间戳和时区计算当地的时间。

③格林威治处于零时区,北京处于东八区,因此,北京时间比格林威治时间早8个小时。这也就是转换时间中的(+8)由来

三、基本使用

  1. /**
  2. * locaDateTime工具类的使用
  3. *
  4. * @author 王子威
  5. */
  6. @Test
  7. void locaDateTime()
  8. {
  9. // 获取当前时区的日期
  10. LocalDate localDate = LocalDate.now();
  11. // localDate: 2021-09-17
  12. System.out.println("localDate: " + localDate);
  13.  
  14. // 时间
  15. LocalTime localTime = LocalTime.now();
  16. // localTime: 20:50:04.384
  17. System.out.println("localTime: " + localTime);
  18.  
  19. // 根据上面两个对象,获取日期时间
  20. LocalDateTime localDateTime = LocalDateTime.of(localDate, localTime);
  21. // localDateTime: 2021-09-17T20:50:04.384
  22. System.out.println("localDateTime: " + localDateTime);
  23.  
  24. // 使用静态方法生成此对象
  25. LocalDateTime localDateTime2 = LocalDateTime.now();
  26. // localDateTime2: 2021-09-17T20:50:04.384
  27. System.out.println("localDateTime2: " + localDateTime2);
  28. // 格式化时间
  29. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("YYYY-MM-dd HH:mm:ss");
  30. // 格式化之后的时间: 2021-09-17 20:50:04
  31. System.out.println("格式化之后的时间: " + localDateTime2.format(formatter));
  32. // 转化为时间戳(秒)
  33. long epochSecond = localDateTime2.toEpochSecond(ZoneOffset.of("+8"));
  34. // 转化为毫秒
  35. long epochMilli = localDateTime2.atZone(ZoneOffset.systemDefault()).toInstant().toEpochMilli();
  36. // 时间戳为:(秒) 1631883004; (毫秒): 1631883004384
  37. System.out.println("时间戳为:(秒) " + epochSecond + "; (毫秒): " + epochMilli);
  38.  
  39. // 时间戳(毫秒)转化成LocalDateTime
  40. Instant instant = Instant.ofEpochMilli(epochMilli);
  41. LocalDateTime localDateTime3 = LocalDateTime.ofInstant(instant, ZoneOffset.systemDefault());
  42. // 时间戳(毫秒)转化成LocalDateTime: 2021-09-17 20:50:04
  43. System.out.println("时间戳(毫秒)转化成LocalDateTime: " + localDateTime3.format(formatter));
  44.  
  45. // 时间戳(秒)转化成LocalDateTime
  46. Instant instant2 = Instant.ofEpochSecond(epochSecond);
  47. LocalDateTime localDateTime4 = LocalDateTime.ofInstant(instant2, ZoneOffset.systemDefault());
  48. // 时间戳(秒)转化成LocalDateTime: 2021-09-17 20:50:04
  49. System.out.println("时间戳(秒)转化成LocalDateTime: " + localDateTime4.format(formatter));
  50. }

四、场景使用(有好的场景可以私聊发我,我会加上来)

1、获取时间戳

  1. /**
  2. * 获取北京时间戳:of("+8") 和 ofHours(8)意义相同
  3. *
  4. * @author 王子威
  5. */
  6. @Test
  7. void locaDateTime()
  8. {
  9. //获取秒数
  10. Long second = LocalDateTime.now().toEpochSecond(ZoneOffset.ofHours(8));
  11. // second = 1631887657
  12. System.out.println("second = " + second);
  13.  
  14. //获取毫秒数
  15. Long milliSecond = LocalDateTime.now().toInstant(ZoneOffset.ofHours(8)).toEpochMilli();
  16. // milliSecond = 1631887657941
  17. System.out.println("milliSecond = " + milliSecond);
  18. }

2、根据年月获取对应时间

  1. /**
  2. * 根据年-月获取对应时间
  3. *
  4. * @author 王子威
  5. */
  6. @Test
  7. public void testLocalDateTimeUtil()
  8. {
  9. // 获取月初时间
  10. LocalDateTime monthStatus = LocalDateTimeUtil.parseDate("2022-02", "yyyy-MM").atTime(LocalTime.MIN)
  11. .with(TemporalAdjusters.firstDayOfMonth());
  12.  
  13. // monthStatus = 2022-2-1 59:59:59
  14. System.out.println("monthStatus = " + monthStatus);
  15.  
  16. // 获取月末时间
  17. LocalDateTime monthEnd = LocalDateTimeUtil.parseDate("2022-02", "yyyy-MM").atTime(LocalTime.MAX)
  18. .with(TemporalAdjusters.lastDayOfMonth());
  19.  
  20. // monthEnd = 2022-2-28 59:59:59
  21. System.out.println("monthEnd = " + monthEnd);
  22. }

时间工具类之“ JDK1.8中 LocalDate、LocalTime、LocalDateTime、LocalDateTimeUtil四个时间工具类”的更多相关文章

  1. Java8 ,LocalDate,LocalDateTime处理日期和时间工具类,

    Java8 ,LocalDate,LocalDateTime处理日期和时间工具类 1.获取今天的日期 2.在Java 8 中获取年.月.日信息 3.在Java 8 中处理特定日期 4.在Java 8 ...

  2. Java 时间类-Calendar、Date、LocalDate/LocalTime

    1.Date 类 java.util.Date是一个"万能接口",它包含日期.时间,还有毫秒数,如果你只想用java.util.Date存储日期,或者只存储时间,那么,只有你知道哪 ...

  3. LocalDate LocalTime LocalDateTime Instant的操作与使用

    一.简介 LocalDate表示当前(或指定)日期,格式为:yyyy-MM-dd LocalTime表示当前(或指定)时间,格式为:HH:mm:ss SSS LocalDateTime表示当前(或指定 ...

  4. Java并发编程总结4——ConcurrentHashMap在jdk1.8中的改进(转)

    一.简单回顾ConcurrentHashMap在jdk1.7中的设计 先简单看下ConcurrentHashMap类在jdk1.7中的设计,其基本结构如图所示: 每一个segment都是一个HashE ...

  5. Java并发编程总结4——ConcurrentHashMap在jdk1.8中的改进

    一.简单回顾ConcurrentHashMap在jdk1.7中的设计 先简单看下ConcurrentHashMap类在jdk1.7中的设计,其基本结构如图所示: 每一个segment都是一个HashE ...

  6. SpringBoot 之 普通类获取Spring容器中的bean

    [十]SpringBoot 之 普通类获取Spring容器中的bean   我们知道如果我们要在一个类使用spring提供的bean对象,我们需要把这个类注入到spring容器中,交给spring容器 ...

  7. (转载)Java8新的日期API LocalDate, LocalTime

    前言 由于Java Date的各种问题,Java8推出了新的日期API,很受一拨人的追捧. 为什么我们需要新的Java日期/时间API? 在开始研究Java 8日期/时间API之前,让我们先来看一下为 ...

  8. 第十四章 Java常用类

    14.常用类 14.1 字符串相关的类 1课时 14.2 JDK 8之前时间日期API 1课时 14.3 JDK8中新时间日期API 1课时 14.4 JDK8中的Optional类 1课时 14.5 ...

  9. Java 8 Date Time API Example Tutorial – LocalDate, Instant, LocalDateTime, Parse and Format

    参考 Java 8 Date and Time API is one of the most sought after change for developers. Java has been mis ...

随机推荐

  1. VisualStudio2019 利用代码片段管理器新建快捷命令

    原文:https://www.cnblogs.com/huguodong/p/12694902.html 一.前言 VisualStudio 可以通过敲出缩写字符串,然后按两次Tab按键自动展开成一段 ...

  2. C#正则表达式(通俗易懂)

    正则表达式有多重要,话不多说,直接入正题把. 首先我们来说说元字符. 1. . 点号代表除了换行意外的任意单个字符 例如 a.b  说明a和b之间只能有任意一个字符. 2.[]代表从这里面取出任意一个 ...

  3. 自动启动WebLogic系统的服务脚本

    转至:http://blog.chinaunix.net/uid-20164485-id-1973841.html 自动启动WebLogic系统的服务脚本   2010.10.25 TsengYia# ...

  4. iredmail邮件系统离线搭建手册-从零到无

    --时间:2020年10月20日 --作者:飞翔的小胖猪 概述 前言 iRedMail 是一个基于 Linux/BSD 系统的零成本.功能完备.成熟的邮件服务器解决方案.iRedMail 是一个开源. ...

  5. Idea项目添加新文件后运行出现404问题

    今天在项目里添加了一个新的html文件,然后运行项目页面跳转出现了404问题,找不到页面,经过我的一番查找,我注意到了Idea项目下有一个target文件,然后上网搜了解到这个target文件是mav ...

  6. kubernetes配置使用ceph动态存储

    在k8s集群中配置ceph 3.1.使用cephfs (1) 在ceph集群创建cephfs #以下操作在ceph集群的admin或者mon节点上执行 #创建pool来存储数据和元数据 ceph os ...

  7. MySql的事务及数据的导入导出

    Mysql的事务及应用 1.补充数据库的导入与导出 导入 mysql -u root -p database < E:/SS/Test.sql -- 即执行sql文件 导出 -- 结构+数据 m ...

  8. JZ-032-把数组排成最小的数

    把数组排成最小的数 题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为3213 ...

  9. Sqlserver 2008 导出数据库

    sqlserver2008中导出数据库: ①当数据库中的数据量比较大时,可使用备份的方法. 路径可以默认,想自定义就点击[添加],最后[确定]即可. ②当数据量不是很大时,可以采用导出SQL执行语句的 ...

  10. think php 7天免登录

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...