原因是SimpleDateFormat不支持多线程导致的,解决代码如下
// 解决SimpleDateFormat多线程问题
private static final ThreadLocal<DateFormat> sdf_yyyy_MM_dd = new ThreadLocal<DateFormat>() {
@Override
protected DateFormat initialValue() {
return new SimpleDateFormat("yyyy-MM-dd");
}
};
private static final ThreadLocal<DateFormat> sdf_yyyy_MM_dd_HH_mm = new ThreadLocal<DateFormat>() {
@Override
protected DateFormat initialValue() {
return new SimpleDateFormat("yyyy-MM-dd HH:mm");
}
};
private static final ThreadLocal<DateFormat> sdf_yyyy_MM_dd_HH_mm_ss = new ThreadLocal<DateFormat>() {
@Override
protected DateFormat initialValue() {
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
}
};
public static Date sdf_parse(ThreadLocal<DateFormat> sdf, String str) {
Date d = null;
if (StringUtils.isNotBlank(str)) {
try {
d = sdf.get().parse(str);
} catch (ParseException e) {
e.printStackTrace();
}
}
return d;
}
public static String sdf_format(ThreadLocal<DateFormat> sdf, Date date) {
String str = "";
if (date != null) {
str = sdf.get().format(date);
}
return str;
}
sdf_format(sdf_yyyy_MM_dd_HH_mm_ss, issuedDate)
sdf_parse(sdf_yyyy_MM_dd_HH_mm, isDate + " " + issuedTime)