SimpleDateFormat date格式化util
2016-08-03 10:40
441 查看
SimpleDateFormat 是线程不安全的,当多线程调用SimpleDateFormat时,会出现各种各样奇怪的日期格式。现提供一种常用的dateUtil工具类。
apache 提供的common-lang工具包中的DateFormatUtils是线程安全的,附maven依赖。
<!-- common 工具包 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.3.1</version>
</dependency>
package com.datayes.check.util; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map; public class DateUtil { /** 锁对象 */ private static final Object lockObj = new Object(); /** 存放不同的日期模板格式的sdf的Map */ private static Map<String, ThreadLocal<SimpleDateFormat>> sdfMap = new HashMap<String, ThreadLocal<SimpleDateFormat>>(); /** * 返回一个ThreadLocal的sdf,每个线程只会new一次sdf * * @param pattern * @return */ private static SimpleDateFormat getSdf(final String pattern) { ThreadLocal<SimpleDateFormat> tl = sdfMap.get(pattern); // 此处的双重判断和同步是为了防止sdfMap这个单例被多次put重复的sdf if (tl == null) { synchronized (lockObj) { tl = sdfMap.get(pattern); if (tl == null) { // 只有Map中还没有这个pattern的sdf才会生成新的sdf并放入map System.out.println("put new sdf of pattern " + pattern + " to map"); // 这里是关键,使用ThreadLocal<SimpleDateFormat>替代原来直接new // SimpleDateFormat tl = new ThreadLocal<SimpleDateFormat>() { @Override protected SimpleDateFormat initialValue() { System.out.println("thread: " + Thread.currentThread() + " init pattern: " + pattern); return new SimpleDateFormat(pattern); } }; sdfMap.put(pattern, tl); } } } return tl.get(); } /** * 是用ThreadLocal * <SimpleDateFormat>来获取SimpleDateFormat,这样每个线程只会有一个SimpleDateFormat * * @param date * @param pattern * @return */ public static String format(Date date, String pattern) { return getSdf(pattern).format(date); } public static Date parse(String dateStr, String pattern) throws ParseException { return getSdf(pattern).parse(dateStr); } public static String format(Date date) { return getSdf("yyyy-MM-dd").format(date); } public static Date parse(String dateStr) throws ParseException { return getSdf("yyyy-MM-dd").parse(dateStr); } }
apache 提供的common-lang工具包中的DateFormatUtils是线程安全的,附maven依赖。
<!-- common 工具包 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.3.1</version>
</dependency>
相关文章推荐
- SimpleDateFormat安全的时间格式化线程安全问题
- 深入理解Java:SimpleDateFormat安全的时间格式化
- 深入理解Java:SimpleDateFormat安全的时间格式化
- 深入理解Java:SimpleDateFormat安全的时间格式化
- android 利用SimpleDateFormat格式化时间不准确的问题
- 深入理解Java:SimpleDateFormat安全的时间格式化
- JAVA 利用SimpleDateFormat将String转换为格式化的日期
- 深入理解Java:SimpleDateFormat安全的时间格式化
- java时间格式化SimpleDateFormat
- SimpleDateFormat安全的时间格式化
- Java中格式化日期时间的类:SimpleDateFormat 用法详解
- SimpleDateFormat日期格式化
- 微信小程序 时间格式化(util.formatTime(new Date))详解
- SimpleDateFormat安全的时间格式化
- SimpleDateFormat格式化日期
- 关于SimpleDateFormat安全的时间格式化线程安全问题
- 详解Java中格式化日期的DateFormat与SimpleDateFormat类
- Java SimpleDateFormat 中英文时间格式化转换
- 关于SimpleDateFormat安全的时间格式化线程安全问题
- 深入理解Java:SimpleDateFormat安全的时间格式化