封装了 SimpleDateFormat 的DateUtil

2018-07-20    来源:open-open

容器云强势上线!快速搭建集群,上万Linux镜像随意使用

很久之前,承接了一个写了一半的案子,自专案开始可以测试起就有一个问题,日期时间资料输出会偶尔有几笔显示为很怪的日期,例如是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); 
  } 
}

标签: 代码

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。

上一篇:java图片格式转化(例如jpg格式转化png)

下一篇:Java: 检查互联网连接