/*
* 系统名称: ARES 应用快速开发企业套件
* 模块名称:
* 类 名 称: DatetimeUtil.java
* 软件版权: ******股份有限公司
* 相关文档:
* 修改记录:
* 修改日期 修改人员 修改说明<BR>
* ======== ====== ============================================
*
* ======== ====== ============================================
* 评审记录:
*
* 评审人员:
* 评审日期:
* 发现问题:
*/
package com.hundsun.jresplus.trace.util;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* 功能说明: 时间日期获取工具<br>
* 系统版本: v1.0<br>
* 开发人员: xujin@hudnsun.com<br>
* 开发时间: 2017-07-31<br>
*/
public class DatetimeUtil {
/** 锁对象 */
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) {
// 这里是关键,使用ThreadLocal<SimpleDateFormat>替代原来直接new SimpleDateFormat
tl = new ThreadLocal<SimpleDateFormat>() {
@Override
protected SimpleDateFormat initialValue() {
return new SimpleDateFormat(pattern);
}
};
sdfMap.put(pattern, tl);
}
}
}
return tl.get();
}
/**
* @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 getNowTimestamp() {
return format(new Date(System.currentTimeMillis()),"yyyy-MM-dd HH:mm:ss:SSS");
}
}