스레드 보안 DateTimeFormatter 스레드가 안전하지 않은 SimpleDateFormat 교체

2655 단어
두 가지 가장 큰 차이점은 자바8의 DateTimeFormatter는 라인이 안전하고 SimpleDateFormat는 라인이 안전하지 않다는 것이다.
SimpleDateFormat를 두 가지 방법으로 교체할 수 있습니다.
방법 1: DateUtils 도구 클래스를 사용하는 방법
설명: SimpleDateFormat는 현재 스레드에서만 공유할 수 있도록 제한하여 다중 스레드로 인한 스레드 안전 문제를 피할 수 있습니다.
private static final ThreadLocal df = new ThreadLocal() {
@Override
protected DateFormat initialValue() {
return new SimpleDateFormat("yyyy-MM-dd");
}
};

 //      
 public static String format(Date date) {
        return threadLocal.get().format(date);
 }

 //      
public static String parse(String str){
    return threadLocal.get.parse(str);
}

방법2: JDK8의 새로운 기능을 사용한 DateTimeFormatter
설명: DateTimeFormatter는 안전한 스레드입니다.java에서.시간 중
public static void main(String[] args) {
        //DateTimeFormatter            
        //         ---          DateTimeFormatter   ,     
        DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy MM dd  hh:mm:ss");
        LocalDateTime now = LocalDateTime.now();
        String format1 = now.format(format);
        System.out.println(format1);
        //        DateTimeFormatter    ISO_DATE  2018-11-12  / ISO_LOCAL_TIME 14:03:24.266  / ISO_LOCAL_DATE_TIME 2018-11-12T14:03:54.363  / BASIC_ISO_DATE  20181112   
        DateTimeFormatter isoDate = DateTimeFormatter.BASIC_ISO_DATE;
        LocalDateTime now2 = LocalDateTime.now();
        String format2 = now.format(isoDate);
        System.out.println(format2);
        //        
        LocalDateTime now3 = LocalDateTime.now();
        DateTimeFormatter format3 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); //HH24   ,hh12   
        String str = "2014-04-12 01:06:09";
       // LocalDate        ,     
        LocalDate parse = LocalDate.parse(str, format3);
        System.out.println(parse+" parse");
        //LocalDateTime         ,     ,  localdatetime   ,        24   ,   hh,     
        LocalDateTime parse1 = LocalDateTime.parse(str, format3);
        System.out.println(parse1+" parse1");
        //            ,          LocalDateTime 
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyyMMdd");
        LocalDate ld = LocalDate.parse("20180306", dtf);
        //       ,localTime         localDate      
        LocalDateTime ldt = LocalDateTime.of(ld, LocalTime.of(12,12,12));
        System.out.println(ldt+" ldt");
        //instant       
  I     Instant now = Instant.now();
        String format = DateTimeFormatter.ofPattern("yyyy:MM:dd HH:mm:ss").format(now);

}

좋은 웹페이지 즐겨찾기