SimpleDateFormat
SimpleDateFormat: 날짜를 파싱(text -> date) 또는 포매팅(date -> text)할 때 사용하는 locale-sesitive 클래스이다.
하지만 멀티스레드 환경에서 Thread-safe를 보장하지 않는다. 내부적으로 Calender 클래스를 인스턴스화해서 사용하는데 멀티쓰레드 충돌을 방지해주는 장치가 없기 때문이다.
new
연산자를 통해 새로운 인스턴스를 생성해 해결할 수 있다. 하지만 SimpleDateFormat은 비싼 객체로 CPU 자원을 많이 사용한다.
DateTimeFormatter
JDK8 부터 DateTimeFormatter 사용을 권장한다.
- LocalDate: yyyy.MM.dd
- LocalTime: HH.mm.ss
- LocalDateTime: yyyy.MM.dd HH.mm.ss (+나노 초 가능)
// 날짜 생성
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDateTime today = LocalDateTime.now();
String today2 = today.format(formatter);
// 날짜 연산
LocalDateTime afterHour = today.plusDays(1);
// 날짜 비교
boolean a = today.isBefore(afterHour);
boolean b = today.isAfter(afterHour);
boolean c = today.isEqual(afterHour);
// String -> LocalDateTime
String dateTime = "2023-08-21";
LocalDateTime localDateTime = LocalDateTime.parse(dateTime);