반응형
날짜와 시간을 문자열로 변환하거나, 문자열을 날짜와 시간 객체로 변환할 때 포맷을 지정해 줍니다. 이를 위해 Java에서는 여러 가지 포맷 클래스가 제공됩니다. 각 클래스는 기능, 성능, 스레드 안전성 등에 차이가 있기 때문에 적절하게 선택해주어야 합니다.
클래스 | 스레드 안전성 | 포맷팅 | 파싱 | Java 버전 |
SimpleDateFormat | X | O | O | Java 7 이하 |
DateTimeFormatter | O | O | O | Java 8 이상 |
FastDateFormat | O | O | X | 모든 버전 |
SimpleDateFormat (Java 7 이하)
simpleDateFormat은 Java 7 이하에서 많이 사용되던 날짜/시간 포맷 클래스입니다. 이는 스레드 안전하지 않다는 단점이 있어서, 멀티스레드 환경에서 사용할 때 주의가 필요합니다. Java 8에서 더 좋은 대안(DateTimeFormatter)이 나오면서, 이 클래스는 더 이상 권장되지 않습니다.
// 현재 날짜 및 시간
Date now = new Date();
// 날짜 포맷 지정 (년-월-일 시간:분:초)
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String formattedDate = sdf.format(now);
System.out.println("Formatted Date: " + formattedDate);
// Formatted Date: 2024-09-24 20:00:00
// 문자열을 다시 Date 객체로 변환 (파싱)
String dateString = "2024-09-24 20:30:00";
Date parsedDate = sdf.parse(dateString);
System.out.println("Parsed Date: " + parsedDate);
// Parsed Date: Thu Sep 24 20:30:00 KST 2024
DateTimeFormatter (Java 8 이상) ⭐
Java 8부터는 DateTimeFormatter가 도입되어 SimpleDateFormat의 문제를 해결했습니다. 스레드 안전하며, 더 다양한 기능과 유연한 포맷팅 옵션을 제공합니다.
- 스레드 안전: 여러 스레드에서 안전하게 사용할 수 있습니다.
- 패턴 기반 포맷: ofPattern()을 사용하여 포맷 패턴을 지정할 수 있습니다.
- 지역화 지원: 여러 로케일을 지원하여 다양한 언어와 국가별로 날짜와 시간을 포맷할 수 있습니다.
- 지원하는 타입: LocalDate, LocalTime, LocalDateTime, ZonedDateTime 등 현대적인 날짜/시간 클래스를 지원합니다.
// 현재 날짜 및 시간
LocalDateTime now = LocalDateTime.now();
// 날짜 및 시간 포맷 지정 (년-월-일 시간:분:초)
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formattedDateTime = now.format(formatter);
System.out.println("Formatted LocalDateTime: " + formattedDateTime);
// Formatted LocalDateTime: 2024-09-24 20:45:00
// 문자열을 다시 LocalDateTime 객체로 변환 (파싱)
String dateString = "2024-09-24 20:45:00";
LocalDateTime parsedDateTime = LocalDateTime.parse(dateString, formatter);
System.out.println("Parsed LocalDateTime: " + parsedDateTime);
// Parsed LocalDateTime: 2024-09-24T20:45:00
FastDateFormat (Apache Commons)
FastDateFormat은 Apache Commons Lang 라이브러리에서 제공하는 날짜 포맷팅 클래스입니다. 이 클래스는 스레드 안전하며, Java 7 이하에서는 SimpleDateFormat의 대안으로 사용되었으나, Java 8 이후에는 DateTimeFormatter가 나왔기 때문에 이전보다 FastDateFormat을 사용 빈도는 줄었습니다. FastDateFormat은 포맷만 가능하고 파싱은 불가합니다.
// 현재 날짜 및 시간
Date now = new Date();
// 날짜 포맷 지정
FastDateFormat fastDateFormat = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss");
String formattedDate = fastDateFormat.format(now);
System.out.println("Formatted Date: " + formattedDate);
// Formatted Date: 2024-09-24 21:00:00
// 파싱은 지원하지 않음
날짜 및 시간 포맷 패턴 예시
패턴 | 설명 | 예시 값 |
yyyy-MM-dd | 연도-월-일 | 2024-09-24 |
dd/MM/yyyy | 일/월/연도 | 24/09/2024 |
yyyy-MM-dd HH:mm:ss | 연도-월-일 시간:분:초 | 2024-09-24 21:00:00 |
EEEE, MMM dd, yyyy | 요일, 월 일, 연도 | Thursday, Sep 24, 2024 |
hh:mm:ss a | 시:분:초 AM/PM | 09:00:00 PM |
dd'T'HH:mm:ss.SSSZ | ISO 8601 표준 시간 포맷 | 2024-09-24T21:00:00.000+0900 |
반응형
'Java' 카테고리의 다른 글
Java 멀티스레드 환경에서 Collection 사용: 동기화된 컬렉션과 Concurrent 컬렉션 (1) | 2024.09.26 |
---|---|
Java 컬렉션 프레임워크 완벽 이해하기 (0) | 2024.09.26 |
Java 날짜 시간 다루기: LocalDateTime, Instant, OffsetDateTime, ZonedDateTime의 차이. Duration, Period (0) | 2024.09.23 |
Java 예외 처리 완벽 이해하기 (0) | 2024.09.19 |
Java JVM 메모리 구조와 메모리 저장 방식 (1) | 2024.09.18 |