在工作中,通过SimpleDateFormat将字符串类型转为日期类型时,发现有时返回的日期类型出错,调用方法如下:
public final class DateUtil { static final DateFormat YYYYMMDD_FORMAT = new java.text.SimpleDateFormat("yyyyMMdd"); /** * 把yyyyMMdd格式字符串转换成 java.util.Date * * @param dateStr * @return */ public static java.util.Date getUtilDateByShortStr(String datestr) { try { return YYYYMMDD_FORMAT.parse(datestr); } catch (ParseException e) { throw new SasException("error.dateformate"); } }}
在多线程调用的情况下,返回的日期型数据与传进去的字符串型日期有可能不一致,即SimpleDateFormat是线程不安全的,所以要把以上方法改造成线程安全的:
public final class DateUtil { static final DateFormat YYYYMMDD_FORMAT = new java.text.SimpleDateFormat("yyyyMMdd"); /** * 把yyyyMMdd格式字符串转换成 java.util.Date * * @param dateStr * @return */ public synchronized static java.util.Date getUtilDateByShortStr(String datestr) { try { return YYYYMMDD_FORMAT.parse(datestr); } catch (ParseException e) { throw new SasException("error.dateformate"); } }}