封裝了 SimpleDateFormat 的DateUtil

cctvmfc 8年前發布 | 701 次閱讀 Java

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