본문 바로가기
Web Programming

Java DateTimeFormatter VS SimpleDateFormat

by 맑은안개 2023. 12. 1.

Image created by DALL-E

DateTimeFormatter VS SimpleDateFormat

Java 8 버전에서 날짜와 관련된 많은 클래스가 개선되었다. 그 중에 하나가 Local~ 시리즈인데, 이와 함께 기존 SimpleDateFormat 클래스의 개선된 버전인 DateTimeFormatter가 소개되었다.

  1. 스레드 안전성: DateTimeFormatter는 스레드 안전하므로, 여러 스레드가 동일한 인스턴스를 문제없이 사용할 수 있다. 반면에, SimpleDateFormat은 스레드 안전하지 않다.
  2. 불변성: DateTimeFormatter는 불변객체로서, 한 번 인스턴스를 생성하면 그 속성을 변경할 수 없다.
  3. 유연성 및 오류 처리: DateTimeFormatter는 SimpleDateFormat보다 포맷팅 옵션 측면에서 더 다양한 함수를 제공하여 유연성을 높였다. 예를 들어, ISO 날짜-시간 포맷을 포함한 더 넓은 범위의 날짜 및 시간 형식을 처리할 수 있으며, 지역화된 날짜 및 시간 패턴과 같은 더 많은 포맷팅 및 파싱 옵션을 지원한다.

예제코드

1. Thread-safe example

@Test
    public void testDateTimeFormatterThreadSafety() {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

        Runnable task = () -> {
            LocalDateTime parsedDate = LocalDateTime.parse("2023-12-01 12:00:00", formatter);
            assertEquals("2023-12-01 12:00:00", formatter.format(parsedDate));
        };

        Thread thread1 = new Thread(task);
        Thread thread2 = new Thread(task);

        thread1.start();
        thread2.start();
    }

2. Flexibility

    @Test
    public void testDateTimeFormatterFlexibility() {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        String dateString = "2023-12-01 12:00:00";
        LocalDateTime date = LocalDateTime.parse(dateString, formatter);

        assertEquals(2023, date.getYear());
        assertEquals(12, date.getMonthValue());
        assertEquals(1, date.getDayOfMonth());
    }
반응형