一、介绍

java8之前有Date类和Calendar类,但存在着不少缺陷,在java8中Date类的很多方法已经被弃用。

  • Date类不格式化可读性差,所以就需要格式化,使用SimpleDateFormat来进行格式化操作,线程不安全。
  • Calendar类时一个共享变量,而且没有做线程不安全处理,当多个线程同时使用SimpleDateFormat调用format方法时,多个线程会同时调用calendar.setTime()方法,从而导致time的值一直被修改,最终返回的时间时错误的。并且SimpleDateFormat中format和parse方法都是线程不安全的。

在java8之后出现了LocalDate、LocalTime和LocalDateTime这些类,这些类使用final修饰,使得这些类是不可变的,一旦实例化值就固定了,线程安全。其中LocalTime是适用于时分秒,LocalDate是适用于年月日,LocalDateTime是适用于年月日时分秒。

二、导入时间工具包

使用LocalTime、LocalDate、LocalDateTime需要导入对应的三个包,一般在使用时会自动导入。

import java.time.LocalTime;

import java.time.LocalDate;

import java.time.LocalDateTime;

三、常用方法汇总

  • 获取当前日期

LocalDate date=LocalDate.now();

  • 获取当前日期时间 

LocalDateTime dateTime=LocalDateTime.now();

  •   获取当前日期前一天、后一天

LocalDateTime now=LocalDateTime.now();

//前一天

LocalDateTime beforeDay=now.minusDay(1);

//后一天

LocalDateTime afterDay=now.plusDay(1);

  • 方法1、获取一天开始时间、结束时间

//开始时间,精确到分钟

LocalDateTime startOfDay=localDate.now().atStartOfDay();

//结束时间

LocalDate now = LocalDate.now();

LocalDateTime endTime = LocalDateTime.of(now .getYear(), now .getMonth(), now .getDayOfMonth(), 23, 59, 59);

  • 方法2、获取一天开始时间、结束时间
//当天开始时间和结束时间 打印结果-->开始时间:2021-12-29T00:00 结束时间:2021-12-29T23:59:59.999999999
LocalDateTime startDateTime = LocalDateTime.of(LocalDate.now(), LocalTime.MIN);
LocalDateTime endDateTime = LocalDateTime.of(LocalDate.now(), LocalTime.MAX);

注: 获取一天开始时间和结束时间还有很多方法,想使用"yyyy-MM-dd HH:mm:ss"这种类型还需要格式化,例如:开始时间:2021-12-29T00:00 结束时间:2021-12-29T23:59:59.999999999

//当天开始时间和结束时间 打印结果-->开始时间:2021-12-29T00:00 结束时间:2021-12-29T23:59:59.999999999
LocalDateTime startDateTime = LocalDateTime.of(LocalDate.now(), LocalTime.MIN);
LocalDateTime endDateTime = LocalDateTime.of(LocalDate.now(), LocalTime.MAX);DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String start = format.of(startDateTime);
String end = format.of(endDateTime);
//此时的start和end才变成了"yyyy-MM-ss HH:mm:ss"格式
  • 获取当前日期是星期几

LocalDate now = LocalDate.now();

DayOfWeek dayOfWeek = now.getDayOfWeek();

  • 获得当前日期所在周的周一 

//获取当前时间
LocalDate now = LocalDate.now();
//获取当前时间所在周的第一天
LocalDate with = now.with(DayOfWeek.MONDAY);

  • 日期判断前后 ,常用于循环

date1、date2均为LocalDate类型

// 当前日期是否在指定日期之后

date1.isAfter(date2);

// 当前日期是否在指定日期之前

date1.isBefore(date2);

  • 设置日期年、月、日

设置部分:withDayOfMonth()/withDayOfYear()/withMonth()/withYear() :将月份天数、年份天数、月份、年份修改为指定的值并返回新的对象(体现的是不可变性)(只举例部分代码,主要说明不可变性)

//修改当月的第几天

LocalDateTime localDateTime2 = localDateTime3.withDayOfMonth(22);

  • getDayOfMonth()/getDayOfYear()/getDayOfWeek() : 获得月份天数(1-31) /获得年份天数(1-366)/获得一周的第几天

LocalDateTime localDateTime3 = LocalDateTime.now();
System.out.println(localDateTime3.getDayOfMonth());//10
System.out.println(localDateTime3.getDayOfYear());//283
System.out.println(localDateTime3.getDayOfWeek());//MONDAY

LocalDate date = LocalDate.now();
LocalDate firstDay = date.with(TemporalAdjusters.firstDayOfMonth()); // 获取当前月的第一天
LocalDate lastDay = date.with(TemporalAdjusters.lastDayOfMonth()); // 获取当前月的最后一天

  • 使用TemporalAdjusters方法实现,获取前一月的第一天和最后一天

LocalDate date = LocalDate.now();

LocalDate lastMonth = date.minusMonths(1); // 当前月份减1

LocalDate firstDay = lastMonth.with(TemporalAdjusters.firstDayOfMonth()); // 获取当前月的第一天

LocalDate lastDay = lastMonth.with(TemporalAdjusters.lastDayOfMonth()); // 获取当前月的最后一天

  • 使用TemporalAdjusters方法实现,获取当前年的第一天和最后一天

LocalDate date = LocalDate.now();
LocalDate firstDay = date.with(TemporalAdjusters.firstDayOfYear()); // 获取当前月的第一天
LocalDate lastDay = date.with(TemporalAdjusters.lastDayOfYear()); // 获取当前月的最后一天

四、LocalDate、LocalDateTime与字符串的相互转换

LocalDate,LocalTime,LocalDateTime类进行格式化需要使用DateTimeFormatter类

  • String类型转日期时间类型
//String转换成日期类型//String类型转换成LocalDate类型
LocalDate localDate = LocalDate.parse("2019-12-07");//String类型转换为LocalTime类型
LocalTime localTime = LocalTime.parse("17:26:00");//String类型转换为LocalDateTime类型
//按照12小时计算
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
//按照24小时计算
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDate localDate = LocalDate.parse("2019-12-07 07:43:53",formatter);
  • 日期时间类型转String类型 
//日期类型转换成String类型//localDate转换成String
LocalDate localDate = LocalDate.now();
//按照yyyyMMdd样式进行更改
String format = localDate.format(DateTimeFormatter.BASIC_ISO_DATE);//按照yyyy-MM-dd样式进行更改
String format = localDate.format(DateTimeFormatter.ISO_DATE);//自定义样式进行更改
DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
String format = localDate.format(pattern);//LocalTime类型转换为String类型
//按照xx:xx:xx.xx样式进行转换
LocalTime localTime = LocalTime.now();
String format3 = localTime.format(DateTimeFormatter.ISO_TIME); //按照自定义样式进行转换
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("hh:mm:ss");
String format4 = localTime.format(formatter);        //LocalDateTime类型转换为String类型
LocalDateTime localDateTime = LocalDateTime.now();
DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
String format5 = localDateTime.format(formatter2);

【java8】LocalDateTime、LocalDate与LocalTime的基本使用相关推荐

  1. java8中LocalDate、LocalTime、LocalDateTime介绍

    很久以前java8中就推出了新的Time API,旨在解决旧版Date和Calendar的缺陷.讲道理真的挺好用的,不过由其他工具对新版time的兼容并不够完善,导致现在使用还不够普及.大家都还在用老 ...

  2. java8的LocalDate、LocalDateTime和之前的Date、Calendar

    背景 之前研究了一下java里边的Date和Calendar是怎么实现的(<Calendar源码--JDK是怎么计算时间的>),然后发现有文章介绍到java8有LocalDate,然后想着 ...

  3. 9 mybatis中使用Java8的日期LocalDate、LocalTime、LocalDateTime

    注意: 1.大家知道,在实体Entity里面,可以使用java.sql.Date.java.sql.Timestamp.java.util.Date来映射到数据库的date.timestamp.dat ...

  4. Java中 LocalDate、LocalTime、LocalDateTime三个时间工具类的使用介绍

    Java中 LocalDate.LocalTime.LocalDateTime三个时间工具类的使用介绍 一.背景: 之前在做项目的过程中,对日期时间类没有一个系统的了解,总是在用的时候去搜索一下,解决 ...

  5. 关于LocalDate、LocalTime、LocalDateTime

    0.快速上手 看源码: https://www.matools.com/api/java8 在java.time中 //获取当前时间 LocalDateTime localDateTime = Loc ...

  6. LocalDate、LocalTime、LocalDateTime使用与区别

    前言 LocalDate.LocalTime.LocalDateTime这三个类是java8新提供的时间操作类 LocalDate: 主管yyyy-MM-dd这种形式,也就是只管:年-月-日 Loca ...

  7. Java 8 Time Api 使用(LocalDate,LocalTime和LocalDateTime等)

    目录 1.概述 2. 旧的时间API(java8之前)的问题 3. 使用LocalDate,LocalTime和LocalDateTime 3.1.使用LocalDate 3.2.使用LocalTim ...

  8. 【Java 8系列】Java日期时间的新主宰者:LocalDate、LocalTime、LocalDateTime、ZonedDateTime

    热门系列: [Java 8系列]收集器Collector与工具类Collectors [Java 8系列]Stream详解,看这一篇就够啦 [Java 8系列]Lambda 表达式,一看就废 [Jav ...

  9. Java 8 中 Date与LocalDateTime、LocalDate、LocalTime互转

    Java 8中 java.util.Date 类新增了两个方法,分别是from(Instant instant)和toInstant()方法 // Obtains an instance of Dat ...

最新文章

  1. loadrunner支持https协议的操作方法-经验总结
  2. MS IME 2007输入法
  3. iOS进阶之架构设计MVC(1)
  4. 人群计数最全代码、数据、论文合集
  5. 错误:cl: 命令行 error D8021 :无效的数值参数“/Wno-cpp”
  6. sdn智能互联系统及开发平台_聊天交友平台系统APP开发
  7. 大学加权平均分计算器_英国排名前20的大学GPA要求
  8. SCOI 2014 new :未来展望
  9. java 接口不是不能new吗?- java:使用匿名类直接new接口
  10. fastjson为什么默认是无序的
  11. Jmeter性能测试的标准流程
  12. 2.VMware View 4.6安装与部署-域环境
  13. 俄勒冈州立大学计算机科学专业,美国俄勒冈州立大学专业介绍
  14. 部署和调优 2.1 squid正向代理
  15. 魅族自动化测试架构之路
  16. 易语言制作的QQ聊天中常用的GIF图片【带源码下载】
  17. Qt三方库开发技术:二维码生成、识别以及条码识别
  18. php学习笔记:登录练习(3)
  19. p2v之clonezilla(1)再生龙启动u盘制作
  20. 少儿编程和机器人编程哪个更好一点

热门文章

  1. 主动触控笔_如何自定义表面笔触控笔
  2. 联想启天M420-D046(C)电脑Win10改Win7
  3. 公路多孔箱涵设计_新规范箱涵结构设计(2010年7月)
  4. hive启动报错:Relative path in absolute URI:${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D
  5. ja-netfilter-all,IntelliJ IDEA 2021.3.2 (Ultimate Edition)
  6. CloudBu面试题
  7. 运用java打印出菱形
  8. 项目oms之----阿里巴巴字体图标运用详解 (含:彩色图标svg运用)
  9. 深入理解python--线程、进程与协程(1)
  10. 彻底解决IDEA输出中文乱码问题