很久之前,承接了一个写了一半的案子,自专案开始可以测试起就有一个问题,日期时间资料输出会偶尔有几笔显示为很怪的日期,例如是1977/XX /XX,2032/XX /XX,但是怎么写Unit Test就是找不出怎么发生的,当时年纪小,不知道SimpleDateFormat并非ThreadSafe,当时在专案最后被逼得花了五天的时间,就是在找这个问题怎么能重现,最后突然看到Java Doc里的说明,真的差点流下泪来…..但是知道Simpl eDateFormat不是ThreadSafe后又有另一个问题,要产生一个SimpleDateFormat物件是颇花 Resource的,因为里面包了一个Calendar物件,最初以为使用Clone可以减少消耗Resource,但最后想到,虽然不是Tread Safe,那就让一个Thread只有一个SimpleDateFormat Instance就好…. 是的,这是我知道有ThreadLocal这东西后才算解决。代码转自Blogspot
DateUtils.java
public abstract class DateUtils {
private static final Logger logger = LoggerFactory.getLogger(DateUtils.class );
private static ThreadLocal<simpledateformat> defaultDateFormat =
new ThreadLocal<simpledateformat>();
public static final SimpleDateFormat getDefaultDateFormat() {
if (null == defaultDateFormat .get()) {
defaultDateFormat .set(new SimpleDateFormat("yyyy/MM/dd" ));
}
return defaultDateFormat.get();
}
public static final Date pareseDate(String date) {
Date result = null ;
try {
result = getDefaultDateFormat().parse(date);
} catch (ParseException e) {
logger .error( "Can't parse {} to Date", date);
}
return result;
}
public static final String formatDate(Date date) {
return getDefaultDateFormat().format(date);
}
}
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/10440.html