两者最大的区别是,Java8的DateTimeFormatter是线程安全的,而SimpleDateFormat并不是线程安全。
-
package com.main;
-
-
import java.text.DateFormat;
-
import java.text.SimpleDateFormat;
-
import java.time.LocalDate;
-
import java.time.LocalDateTime;
-
import java.time.format.DateTimeFormatter;
-
import java.util.Date;
-
-
publicclassMain{
-
-
publicstaticvoidmain(String args[]){
-
-
//解析日期
-
String dateStr= "2016年10月25日";
-
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "yyyy年MM月dd日");
-
LocalDate date= LocalDate.parse(dateStr, formatter);
-
-
//日期转换为字符串
-
LocalDateTime now = LocalDateTime.now();
-
DateTimeFormatter format = DateTimeFormatter.ofPattern( "yyyy年MM月dd日 hh:mm a");
-
String nowStr = now .format(format);
-
System.out.println(nowStr);
-
-
//ThreadLocal来限制SimpleDateFormat
-
System.out.println(format( new Date()));
-
}
-
-
//要在高并发环境下能有比较好的体验,可以使用ThreadLocal来限制SimpleDateFormat只能在线程内共享,这样就避免了多线程导致的线程安全问题。
-
privatestatic ThreadLocal<DateFormat> threadLocal = new ThreadLocal<DateFormat>() {
-
@Override
-
protected DateFormat initialValue(){
-
returnnew SimpleDateFormat( "yyyy-MM-dd HH:mm:ss");
-
}
-
};
-
-
publicstatic String format(Date date){
-
return threadLocal.get().format(date);
-
}
-
-
}
-
//2017年07月09日 12:03 下午
-
//2017-07-09 12:03:11
-