日期时间新方式

​ 在日常开发中,对于日期操作是非常常见的,但是对于有经验的开发人员来说Java8之前的日期操作是有较大问题 的。比方说SimpleDateFormat。但是在Java8之后提出了DateTimeFormatter用于解决之前的问题。

SimpleDateFormat的那些坑

SimpleDateFormat本身是线程不安全的,同时继承的DateFormat类也不是线程安全的,在多线程环境下,如果多个线程使用同一个类解析日期,如果将SimpleDateFormat定义为static,所以在多线程下它的实例会被多线程共享,线程之间相互读取时间,就会出现时间差异和其他的那些异常。

DateTimeFormatter 、LocalDate、LocalTime、LocalDateTime

Java8对于日期时间操作提供了一些新类供我们进行使用,现在可以通过DateTimeFormatter来替换掉 SimpleDateFormat。通过LocalDate、LocalTime、LocalDateTime类来操作日期+时间。而且由源码可知,这些类都是不可变更,线程安全的类。其内部提供了若干用于操作日期的方法。

DateTimeFormatter 、LocalDate、LocalTime、LocalDateTime的常用方法

/**
* @author 我是七月呀
* @date 2020/12/28
*/
public class LocalDateDemp { public static void main(String[] args) { /**
* 根据自己需求获取任意时间,例如:2020-12-28 14:57:00
*
*/
LocalDateTime of = LocalDateTime.of(2020, 12, 28, 14, 57, 00);
String format = of.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
System.out.println(format); /**
* 注意:这里的YYYY是表示:当天所在的周属于的年份,一周从周日开始,周六结束,只要本周跨年,那么这周就算入下一年。
* 结果为:2020-12-28 15:39:37
*/
String formatOne = of.format(DateTimeFormatter.ofPattern("YYYY-MM-dd HH:mm:ss"));
System.out.println(formatOne); /**
* 获取当前时间的年月日 时分秒,例如:2020-12-28 15:39:37
*/
DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String format1 = dateTimeFormatter1.format(LocalDateTime.now());
System.out.println(format1); /**
* 获取当前时间的年月日,例如:2020-12-28
*/
DateTimeFormatter dateTimeFormatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String format2 = dateTimeFormatter2.format(LocalDateTime.now());
System.out.println(format2); /**
* 获取当前时间的时分秒,例如:15:39:37
*/
DateTimeFormatter dateTimeFormatter3 = DateTimeFormatter.ofPattern("HH:mm:ss");
String format3 = dateTimeFormatter3.format(LocalDateTime.now());
System.out.println(format3); /**
* 获取当前时间的年月日 时分秒(无符号),例如:20201228153937
*/
DateTimeFormatter dateTimeFormatter4 = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
String format4 = dateTimeFormatter4.format(LocalDateTime.now());
System.out.println(format4); /**
* 获取当前时间的年月日(无符号),例如:20201228
*/
DateTimeFormatter dateTimeFormatter5 = DateTimeFormatter.ofPattern("yyyyMMdd");
String format5 = dateTimeFormatter5.format(LocalDateTime.now());
System.out.println(format5); /**
* 获取当前时间三天后的日期,例如:2020-12-31T15:39:37.807
* 这里的ChronoUnit.DAYS是时间单位,可以是WEEKS、MONTHS、YEARS
*/
LocalDateTime plus = LocalDateTime.now().plus(3, ChronoUnit.DAYS);
System.out.println(plus); /**
* 获取当前时间三天前的日期,例如:2020-12-25T15:39:37.807
* 这里的ChronoUnit.DAYS是时间单位,可以是WEEKS、MONTHS、YEARS
*/
LocalDateTime plus1 = LocalDateTime.now().minus(3, ChronoUnit.DAYS);
System.out.println(plus1); /**
* 获取指定时间当年的最后一天,例如:2020-12-31 23:59:59
*/
String format6 = dateTimeFormatter1.format(LocalDateTime.now().with(TemporalAdjusters.lastDayOfYear()).withHour(23).withMinute(59).withSecond(59));
System.out.println(format6); /**
* 获取指定时间当年的第一天,例如:2020-01-01 00:00:00
*/
String format7 = dateTimeFormatter1.format(LocalDateTime.now().with(TemporalAdjusters.firstDayOfYear()).withHour(00).withMinute(00).withSecond(00));
System.out.println(format7);
String format8 = dateTimeFormatter1.format(LocalDateTime.now().withDayOfYear(1).withHour(00).withMinute(00).withSecond(00));
System.out.println(format8); /**
* 获取指定时间的前三天,例如:2020-12-25
*/
LocalDate minus = LocalDate.now().minus(3, ChronoUnit.DAYS);
System.out.println(minus);
LocalDate localDate = LocalDate.now().minusDays(3);
System.out.println(localDate);
LocalDateTime minus1 = LocalDateTime.now().minus(3, ChronoUnit.DAYS);
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String format9 = minus1.format(dateTimeFormatter);
System.out.println(format9); /**
* 获取指定时间的后三天,例如:2020-12-31
*/
LocalDate plus2 = LocalDate.now().plus(3, ChronoUnit.DAYS);
System.out.println(plus2);
LocalDate localDate1 = LocalDate.now().plusDays(3);
System.out.println(localDate1);
LocalDateTime plus3 = LocalDateTime.now().plus(3, ChronoUnit.DAYS);
DateTimeFormatter dateTimeFormatter6 = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String format10 = plus3.format(dateTimeFormatter6);
System.out.println(format10); } }

JDK8-日期时间新方式的更多相关文章

  1. JDK8日期时间操作小汇总

    统一使用java.time.*包下的类 1.获取当前的日期.时间.日期加时间 LocalDate todayDate = LocalDate.now(); //今天的日期 LocalTime now ...

  2. Java8新特性_日期时间新类 LocalDate、LocalTime、LocalDateTime

    import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.format.DateTimeForma ...

  3. Spring 日期时间处理

    1 Spring自身的支持 1.1 factory-bean <bean id="dateFormat" class="java.text.SimpleDateFo ...

  4. jdk8环境下sprngboot/springmvc中JSR310新日期/时间类LocalDateTime显示效果带T

    如图所示: 日期时间类中带了一个T,以上这种格式LocalDateTime格式化的时候默认日期时间格式:ISO.DATE_TIME(按笔者目前的知识理解是ISO8601规范中的日期时间格式化) 想要把 ...

  5. JDK8中新日期时间API

    它们面临的问题是:可变性:像日期和时间这样的类应该是不可变的.偏移性:Date中的年份是从1900开始的,而月份都从0开始.格式化:格式化只对Date有用,Calendar则不行.此外,它们也不是线程 ...

  6. 详解 JDK8 新增的日期时间类

    JDK8 新增的日期时间类 在本人之前的博文<处理时间的类 -- System类.Date类 .SimpleDateFormat类 与 Calendar类>中,讲到过表示时间的类,有三类: ...

  7. JDK8 新增的日期时间API

    背景 JDK8中增加了一套全新的日期时间API,这里进行总结下,方便查询使用. 新的时间及日期API位于 java.time 包中,下面是一些关键类. Instant:代表的是时间戳. LocalDa ...

  8. 【java】JDK1.8时间日期库 新特性 所有java中时间Date的使用

    除了lambda表达式,stream以及几个小的改进之外,Java 8还引入了一套全新的时间日期API,在本篇教程中我们将通过几个简单的任务示例来学习如何使用java 8的这套API.Java对日期, ...

  9. Java日期时间API系列7-----Jdk8中java.time包中的新的日期时间API类的特点

    1.不变性 新的日期/时间API中,所有的类都是不可变的,这对多线程环境有好处. 比如:LocalDateTime 2.关注点分离 新的API将人可读的日期时间和机器时间(unix timestamp ...

随机推荐

  1. 2020.11.26 IntellJ idea激活码失效解决方法(最新idea激活码及安装参数!)

    今天是2020年11月26号,小伙伴们是不是有发现自己的idea激活码失效了,不瞒大家,小编也是一个JAVA开发者,到了公司打开idea,然后就发现事情不妙,经过1个多小时的摸索,终于把最近的安装参数 ...

  2. fastjson JSONObject简单使用

    工作中用的蛮多的最近整理下,概括地说 通过这个工具可以让一个json在json串,JSONObject,java对象之间进行转化 首先我们先写2个bean来构成一个比较复杂的json串: public ...

  3. 一次SQL注入导致的"越权"

    原文来自SecIN社区-作者:tkswifty 相关背景   在实际的业务开发中,SQL交互往往是业务系统中不可或缺的一项.在Java中提供了类似Mybatis.Hibernate.SpringDat ...

  4. Linux无法新增用户

    1.查看当前用户是否有权限创建用户 2.磁盘空间不足,vi打开/etc/passwd 报: E297: Write error in swap file"adduser.sh" 1 ...

  5. 手把手教你使用Vue/React/Angular三大框架开发Pagination分页组件

    DevUI是一支兼具设计视角和工程视角的团队,服务于华为云DevCloud平台和华为内部数个中后台系统,服务于设计师和前端工程师.官方网站:devui.designNg组件库:ng-devui(欢迎S ...

  6. Beta冲刺——用户测试报告

    这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 这个作业要求在哪里 Beta 冲刺 这个作业的目标 团队进行Alpha冲刺 作业正文 正文 其他参考文献 无 用户测试报告 用户 ...

  7. MySQL数据库入门学习

    一. 前言 作为一名大二在校生,因为正在学习网页设计,考虑到后台问题,所以便自学了数据库,可能给大家总结的不是很全,但是一些必要的点肯定会讲到.现在市场上有很多图形化的数据库, 二. MySQL基础知 ...

  8. 第9.9节 Python文件随机读写定位操作方法seek

    类似于C语言,Python也提供了文件位置定位的操作方法seek. 一. 语法 seek(offset, whence=SEEK_SET) 语法释义: 1)offset :将文件当前操作位置移动偏移量 ...

  9. PyQt(Python+Qt)学习随笔:树型部件QTreeWidget中判断项是否首列跨所有列展示的isFirstItemColumnSpanned方法

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在前面<PyQt(Python+Qt)学习随笔:QTreeWidgetItem项是否首列跨所有 ...

  10. 深入理解C#中的异步(一)——APM模式EAP模式

    深入理解C#中的异步(一)--APM模式EAP模式 目录 深入理解C#中的异步(一)--APM模式EAP模式 1 使用异步编程的原因 2 异步编程模式 2.1 APM模式 2.1.1 APM模式示例代 ...