首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SimpleDateFormat 讲解

SimpleDateFormat 是 Java 中一个非常常用的类,该类用来对日期字符串进行解析和格式化输出, 但如果使用不小心 会导致非常微妙和难以调试的问题, 因为 DateFormat 和 SimpleDateFormat...通过一个具体的场景来深入理解SimpleDateFormat 类。 一.引子 在程序中我们应当尽量少的创建SimpleDateFormat 实例,因为创建这么一个实例需要耗费很大的代价。...(SimpleDateFormat.java:1589) at java.text.SimpleDateFormat.parse(SimpleDateFormat.java:1311)...(SimpleDateFormat.java:1589) at java.text.SimpleDateFormat.parse(SimpleDateFormat.java:1311)...上面的优化过的静态的SimpleDateFormat版,之所在并发情况下回出现各种灵异错误,是因为SimpleDateFormat和DateFormat类不是线程安全的。

69310
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    还在使用SimpleDateFormat

    前言 日常开发中,我们经常需要使用时间相关类,想必大家对SimpleDateFormat并不陌生。...下面我们就来分析分析SimpleDateFormat为什么不安全?是怎么引发的?以及多线程下有那些SimpleDateFormat的解决方案?...先看看《阿里巴巴开发手册》对于SimpleDateFormat是怎么看待的 问题复现 一般我们在使用SimpleDateFormat的时候会把它定义为一个静态变量,避免频繁创建它们的对象实例,代码如下...多线程不安全原因 因为我们把SimpleDateFormat定义为静态变量,那么多线程下SimpleDateFormat的实例就会被多个线程共享,B线程会读取到A线程的时间,就会出现时间差异和其它各种问题...来看看SimpleDateFormat的format()方法的源码: 注意, calendar.setTime(date),SimpleDateFormat的format方法实际操作的就是Calendar

    54140

    SimpleDateFormat 线程安全问题

    因此在多线程环境下,当多个线程同时使用相同的SimpleDateFormat对象(如static修饰)的话,如调用format方法时,多个线程会同时调用calender.setTime方法,导致time...SimpleDateFormat 的 format 方法线程不安全问题 public final String format(Date arg0) { return this.format...SimpleDateFormat是继承DateFormat类,DateFormat类中维护一个Calendar 对象 SimpleDateFormat 继承 DateFormat ,使用的calendar...是父类 DateFormat中的 public class SimpleDateFormat extends DateFormat {} DateFormat 的 calendar 被用来进行 日期...解决方案: 1、将SimpleDateFormat定义成局部变量 2、 加一把线程同步锁:synchronized(lock) 3、使用ThreadLocal,每个线程都拥有自己的SimpleDateFormat

    90010

    使用SimpleDateFormat的时候小心点

    SimpleDateFormat是Java提供的一个格式化和解析日期的工具类,日常开发中应该经常会用到,但是由于它是线程不安全的,多线程公用一个SimpleDateFormat实例对日期进行解析或者格式化会导致程序出错...代码示例演示 写一段小Demo来模拟多线程下SimpleDateFormat做时间格式化的时候报错,代码如下: package com.vernon.test.demo.jdk.text; import...(SimpleDateFormat.java:1869) at java.text.SimpleDateFormat.parse(SimpleDateFormat.java:1514) at java.text.DateFormat.parse...(SimpleDateFormat.java:1869) at java.text.SimpleDateFormat.parse(SimpleDateFormat.java:1514) at java.text.DateFormat.parse...的一个类关系图: 可知每个SimpleDateFormat实例里面有一个Calendar对象,从后面会知道其实SimpleDateFormat之所以是线程不安全的就是因为Calendar是线程不安全的

    25010

    还在用 SimpleDateFormat, 来试试 DateTimeFormatter

    说明 1.8 以前 Java 关于日期的类是 Date 与 Calendar, 与之对应的格式化的类是 SimpleDateFormat。...优缺点比较 很多文章写过 SimpleDateFormat 类,每当提到它,都会让开发人员注意这个类并不是线程安全的,也就是每次使用都必须新生成,而不能当作全局静态变量来使用。...就像 Date 是可变类型是一个设计失误一样,SimpleDateFormat 设计为非线程安全也是一个设计失误,这样的设计失误却需要由程序员来承担。...DateTimeFormatter 在职责分离上也更清晰,由于 Date 没有时区 的信息,所以在格式化时这个任务就只能由 SimpleDateFormat 承担,导致很难理解 SimpleDateFormat...LocalDateTime.now(); return formatter.format(localDateTime); 」 DateTimeFormatter 的 pattern 与 SimpleDateFormat

    89300

    还在用 SimpleDateFormat, 来试试 DateTimeFormatter

    说明 1.8 以前 Java 关于日期的类是 Date 与 Calendar, 与之对应的格式化的类是 SimpleDateFormat。...优缺点比较 很多文章写过 SimpleDateFormat 类,每当提到它,都会让开发人员注意这个类并不是线程安全的,也就是每次使用都必须新生成,而不能当作全局静态变量来使用。...就像 Date 是可变类型是一个设计失误一样,SimpleDateFormat 设计为非线程安全也是一个设计失误,这样的设计失误却需要由程序员来承担。...DateTimeFormatter 在职责分离上也更清晰,由于 Date 没有时区 的信息,所以在格式化时这个任务就只能由 SimpleDateFormat 承担,导致很难理解 SimpleDateFormat...LocalDateTime.now(); return formatter.format(localDateTime); 」 DateTimeFormatter 的 pattern 与 SimpleDateFormat

    1.4K21
    领券