Java8新特性-日期相关类操作

时间:2022-09-22 19:47:58

JDK8以前使用SImpleDateFormate类格式化日期,因为在SImple DateFormate中存在Calendar实例引用,而在caleander中得establish中存在clear()和set()操作,在多线程情况下会产生问题,导致后面得后面线程修改之前线程,因此SImpleDateFormate是线程不安全得;

JDK8中使用DateTimeFormate日期格式化。在JDK8中新增得类是final关键子修饰不可变线程安全,所以可以安全的操作日期转换。

解决SImpleDateFormate线程不安全:

采用局部变量的方式,缺点是每次调用方法时,会有对象产生,对象的回收

采用synchronized或lock,缺点是同一时间内只有一个线程在操作,降低效率

采用第三方框架:joda-time

使用ThreadLocal采用线程副本的方式,使每个线程自身拥有SimpleDateFormate对象。

public class DateUtil {

    private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
private static ThreadLocal threadLocal = new ThreadLocal(); public static Date parse(String textDate) throws ParseException {
return getDateFormat().parse(textDate);
}
public static String format(Date date) throws ParseException {
return getDateFormat().format(date);
}
public static DateFormat getDateFormat() {
DateFormat df = (DateFormat) threadLocal.get();
if (df == null) {
df = new SimpleDateFormat(DATE_FORMAT);
threadLocal.set(df);
}
return df;
} public static void main(String[] args) throws ParseException {
String format = DateUtil.format(new Date());
System.out.println(format);
Date parse = DateUtil.parse("2019-12-03 16:02:59");
System.out.println(parse);
}
}

JDK8中日期函数操作

1. 获得当前时间,当前时间

        LocalDate localDate = LocalDate.now();
System.out.println(localDate);//2019-12-03
Date date = new Date();
System.out.println(date);//Tue Dec 03 14:49:30 CST 2019

2. 获得当前毫秒数

Long millisecond = Instant.now().toEpochMilli();

3.  毫秒数转日期

LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(1575356644592L), ZoneId.systemDefault());
System.out.println(localDateTime);

4. 日期转字符串

LocalDateTime now = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String format = now.format(formatter);
System.out.println(format);//2019-12-03 15:09:38

5. 字符串转日期

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime parse = LocalDateTime.parse("2019-12-03 13:52:50", dtf);
System.out.println(parse);

Java8新特性-日期相关类操作的更多相关文章

  1. 夯实Java基础(十四)——Java8新的日期处理类

    1.前言 Java8之前处理日期一直是Java程序员比较头疼的问题,从Java 8之后,Java里面添加了许多的新特性,其中一个最常见也是最实用的便是日期处理的类——LocalDate.LocalDa ...

  2. java8新特性之Optional类

    NullPointException可以说是所有java程序员都遇到过的一个异常,虽然java从设计之初就力图让程序员脱离指针的苦海,但是指针确实是实际存在的,而java设计者也只能是让指针在java ...

  3. Java8 新特性 Stream 非短路终端操作

    非短路终端操作 Java8 新特性 Stream 练习实例 非短路终端操作,就是所有的元素都遍厉完,直到最后才结束.用来收集成自己想要的数据. 方法有: 遍厉 forEach 归约 reduce 最大 ...

  4. Java8新特性--日期和时间API

    如何正确处理时间 现实生活的世界里,时间是不断向前的,如果向前追溯时间的起点,可能是宇宙出生时,又或是是宇宙出现之前, 但肯定是我们目前无法找到的,我们不知道现在距离时间原点的精确距离.所以我们要表示 ...

  5. 对Java8新的日期时间类的学习(一)

    引用自Java译站http://it.deepinmind.com/java/2015/03/17/20-examples-of-date-and-time-api-from-Java8.html 除 ...

  6. java8新特性六-Optional 类

    Optional 类是一个可以为null的容器对象.如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象. Optional 是个容器:它可以保存类型T的值,或者仅仅保 ...

  7. 对Java8新的日期时间类的学习(二)

    示例11 在Java中如何判断某个日期是在另一个日期的前面还是后面 这也是实际项目中常见的一个任务.你怎么判断某个日期是在另一个日期的前面还是后面,或者正好相等呢?在Java 8中,LocalDate ...

  8. java8新特性 日期

    1. LocalDateTime 2. Instant package com.atguigu.java8; import java.time.DayOfWeek; import java.time. ...

  9. Java8新特性之空指针异常的克星Optional类

    Java8新特性系列我们已经介绍了Stream.Lambda表达式.DateTime日期时间处理,最后以"NullPointerException" 的克星Optional类的讲解 ...

随机推荐

  1. GDB调试汇编栈堆过程的学习

    前期调试 我的程序代码是: 首先,用gcc g gdb.c -o gdb -m32产生32位汇编. 输入gdb gdb进入gdb调试器 在main函数处设置一个断点:b main 用disassemb ...

  2. Spring 事物机制

    Spring两种事物处理机制,一是声明式事物,二是编程式事物  声明式事物 1)Spring的声明式事务管理在底层是建立在AOP的基础之上的. 其本质是对方法前后进行拦截,然后在目标方法开始之前创建或 ...

  3. 看android的书的体会

    android书上面的代码有时候有问题,可以在网上搜索这些功能.网上和官方文档里面有很好的说明和例子.

  4. 前端要怎么学createjs!!!???

    前端想做js开发,可以.但是思维要变通,思维要重塑.为啥?因为被div+css坑的有点深.这些都是我自己总结的,不知道其他人是不是这样. 在我看来div+css算是开发吗?肯定不是,这些东西有难的东西 ...

  5. 解决MYSQL弃用模块错误Deprecated: mysql_query(): The mysql extension is deprecated and will be removed in the future

    今天使用了mysql 5.5版本,就出现了错误.错误提示如下: Deprecated: mysql_connect(): The mysql extension is deprecated and w ...

  6. Struts2的拦截器

    拦截器的作用: 拦截器可以动态地拦截发送到指定Action的请求,通过拦截器机制,可以载Action执行的前后插入某些代码,植入我们的逻辑思维. 拦截器的实现原理: 拦截器通过代理的方式来调用,通过动 ...

  7. Greenplum 简单性能测试与分析

    如今,多样的交易模式以及大众消费观念的改变使得数据库应用领域不断扩大,现代的大型分布式应用系统的数据膨胀也对数据库的海量数据处理能力和并行处理能力提出了更高的要求,如何在数据呈现海量扩张的同时提高处理 ...

  8. Java 英文面试题

    1. Q: What is HashMap and Map?A: Map is Interface and Hashmap is class that implements that. 2. Q: D ...

  9. 《JavaScript高级程序设计》笔记:在HTML中使用Javascript(二)

    script元素 向html页面中插入js的主要方法就是使用<script>元素.使用<script>元素的方式有两种:直接在页面中嵌入js代码和包含外部js文件.直接在页面中 ...

  10. 第2章&colon;MapReduce

    MapReduce是一个数据处理的编程模型.这个模型很简单,但也不是简单到不能够支持一些有用的语言.Hadoop能够运行以多种语言写成的MapReduce程序.在这一章中,我们将看看怎样用Java,R ...