封裝了 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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!