欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

封装了 SimpleDateFormat 的DateUtil,,很久之前,承接了一个写了

来源: javaer 分享于  点击 25550 次 点评:116

封装了 SimpleDateFormat 的DateUtil,,很久之前,承接了一个写了


很久之前,承接了一个写了一半的案子,自专案开始可以测试起就有一个问题,日期时间资料输出会偶尔有几笔显示为很怪的日期,例如是1977/XX/XX,2032/XX /XX,但是怎么写Unit Test就是找不出怎么发生的,当时年纪小,不知道SimpleDateFormat并非ThreadSafe,当时在专案最后被逼得花了五天的时间,就是在找这个问题怎么能重现,最后突然看到Java Doc里的说明,真的差点流下泪来.....

但是知道SimpleDateFormat不是ThreadSafe后又有另一个问题,要产生一个SimpleDateFormat物件是颇花Resource的,因为里面包了一个Calendar物件,最初以为使用Clone可以减少消耗Resource,但最后想到,虽然不是TreadSafe,那就让一个Thread只有一个SimpleDateFormat Instance就好....是的,这是我知道有ThreadLocal这东西后才算解决。

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);   } }//该片段来自于http://byrx.net
相关栏目:

用户点评