封裝了 SimpleDateFormat 的DateUtil
很久之前,承接了一個寫了一半的案子,自專案開始可以測試起就有一個問題,日期時間資料輸出會偶爾有幾筆顯示為很怪的日期,例如是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);
}
}
本文由用戶 cctvmfc 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!