Web Programming
Java DateTimeFormatter VS SimpleDateFormat
맑은안개
2023. 12. 1. 10:39
DateTimeFormatter VS SimpleDateFormat
Java 8 버전에서 날짜와 관련된 많은 클래스가 개선되었다. 그 중에 하나가 Local~ 시리즈인데, 이와 함께 기존 SimpleDateFormat 클래스의 개선된 버전인 DateTimeFormatter가 소개되었다.
- 스레드 안전성: DateTimeFormatter는 스레드 안전하므로, 여러 스레드가 동일한 인스턴스를 문제없이 사용할 수 있다. 반면에, SimpleDateFormat은 스레드 안전하지 않다.
- 불변성: DateTimeFormatter는 불변객체로서, 한 번 인스턴스를 생성하면 그 속성을 변경할 수 없다.
- 유연성 및 오류 처리: 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());
}
반응형