【java8】LocalDateTime、LocalDate与LocalTime的基本使用
一、介绍
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的基本使用相关推荐
- java8中LocalDate、LocalTime、LocalDateTime介绍
很久以前java8中就推出了新的Time API,旨在解决旧版Date和Calendar的缺陷.讲道理真的挺好用的,不过由其他工具对新版time的兼容并不够完善,导致现在使用还不够普及.大家都还在用老 ...
- java8的LocalDate、LocalDateTime和之前的Date、Calendar
背景 之前研究了一下java里边的Date和Calendar是怎么实现的(<Calendar源码--JDK是怎么计算时间的>),然后发现有文章介绍到java8有LocalDate,然后想着 ...
- 9 mybatis中使用Java8的日期LocalDate、LocalTime、LocalDateTime
注意: 1.大家知道,在实体Entity里面,可以使用java.sql.Date.java.sql.Timestamp.java.util.Date来映射到数据库的date.timestamp.dat ...
- Java中 LocalDate、LocalTime、LocalDateTime三个时间工具类的使用介绍
Java中 LocalDate.LocalTime.LocalDateTime三个时间工具类的使用介绍 一.背景: 之前在做项目的过程中,对日期时间类没有一个系统的了解,总是在用的时候去搜索一下,解决 ...
- 关于LocalDate、LocalTime、LocalDateTime
0.快速上手 看源码: https://www.matools.com/api/java8 在java.time中 //获取当前时间 LocalDateTime localDateTime = Loc ...
- LocalDate、LocalTime、LocalDateTime使用与区别
前言 LocalDate.LocalTime.LocalDateTime这三个类是java8新提供的时间操作类 LocalDate: 主管yyyy-MM-dd这种形式,也就是只管:年-月-日 Loca ...
- Java 8 Time Api 使用(LocalDate,LocalTime和LocalDateTime等)
目录 1.概述 2. 旧的时间API(java8之前)的问题 3. 使用LocalDate,LocalTime和LocalDateTime 3.1.使用LocalDate 3.2.使用LocalTim ...
- 【Java 8系列】Java日期时间的新主宰者:LocalDate、LocalTime、LocalDateTime、ZonedDateTime
热门系列: [Java 8系列]收集器Collector与工具类Collectors [Java 8系列]Stream详解,看这一篇就够啦 [Java 8系列]Lambda 表达式,一看就废 [Jav ...
- Java 8 中 Date与LocalDateTime、LocalDate、LocalTime互转
Java 8中 java.util.Date 类新增了两个方法,分别是from(Instant instant)和toInstant()方法 // Obtains an instance of Dat ...
最新文章
- loadrunner支持https协议的操作方法-经验总结
- MS IME 2007输入法
- iOS进阶之架构设计MVC(1)
- 人群计数最全代码、数据、论文合集
- 错误:cl: 命令行 error D8021 :无效的数值参数“/Wno-cpp”
- sdn智能互联系统及开发平台_聊天交友平台系统APP开发
- 大学加权平均分计算器_英国排名前20的大学GPA要求
- SCOI 2014 new :未来展望
- java 接口不是不能new吗?- java:使用匿名类直接new接口
- fastjson为什么默认是无序的
- Jmeter性能测试的标准流程
- 2.VMware View 4.6安装与部署-域环境
- 俄勒冈州立大学计算机科学专业,美国俄勒冈州立大学专业介绍
- 部署和调优 2.1 squid正向代理
- 魅族自动化测试架构之路
- 易语言制作的QQ聊天中常用的GIF图片【带源码下载】
- Qt三方库开发技术:二维码生成、识别以及条码识别
- php学习笔记:登录练习(3)
- p2v之clonezilla(1)再生龙启动u盘制作
- 少儿编程和机器人编程哪个更好一点
热门文章
- 主动触控笔_如何自定义表面笔触控笔
- 联想启天M420-D046(C)电脑Win10改Win7
- 公路多孔箱涵设计_新规范箱涵结构设计(2010年7月)
- hive启动报错:Relative path in absolute URI:${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D
- ja-netfilter-all,IntelliJ IDEA 2021.3.2 (Ultimate Edition)
- CloudBu面试题
- 运用java打印出菱形
- 项目oms之----阿里巴巴字体图标运用详解 (含:彩色图标svg运用)
- 深入理解python--线程、进程与协程(1)
- 彻底解决IDEA输出中文乱码问题