两者最大的区别是,Java8的DateTimeFormatter是线程安全的,而SimpleDateFormat并不是线程安全。

 

  1.  
    package com.main;
  2.  
     
  3.  
    import java.text.DateFormat;
  4.  
    import java.text.SimpleDateFormat;
  5.  
    import java.time.LocalDate;
  6.  
    import java.time.LocalDateTime;
  7.  
    import java.time.format.DateTimeFormatter;
  8.  
    import java.util.Date;
  9.  
     
  10.  
    publicclassMain{
  11.  
     
  12.  
    publicstaticvoidmain(String args[]){
  13.  
     
  14.  
    //解析日期
  15.  
    String dateStr= "2016年10月25日";
  16.  
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "yyyy年MM月dd日");
  17.  
    LocalDate date= LocalDate.parse(dateStr, formatter);
  18.  
     
  19.  
    //日期转换为字符串
  20.  
    LocalDateTime now = LocalDateTime.now();
  21.  
    DateTimeFormatter format = DateTimeFormatter.ofPattern( "yyyy年MM月dd日 hh:mm a");
  22.  
    String nowStr = now .format(format);
  23.  
    System.out.println(nowStr);
  24.  
     
  25.  
    //ThreadLocal来限制SimpleDateFormat
  26.  
    System.out.println(format( new Date()));
  27.  
    }
  28.  
     
  29.  
    //要在高并发环境下能有比较好的体验,可以使用ThreadLocal来限制SimpleDateFormat只能在线程内共享,这样就避免了多线程导致的线程安全问题。
  30.  
    privatestatic ThreadLocal<DateFormat> threadLocal = new ThreadLocal<DateFormat>() {
  31.  
    @Override
  32.  
    protected DateFormat initialValue(){
  33.  
    returnnew SimpleDateFormat( "yyyy-MM-dd HH:mm:ss");
  34.  
    }
  35.  
    };
  36.  
     
  37.  
    publicstatic String format(Date date){
  38.  
    return threadLocal.get().format(date);
  39.  
    }
  40.  
     
  41.  
    }
  42.  
    //2017年07月09日 12:03 下午
  43.  
    //2017-07-09 12:03:11
  44.