java.time
패키지는 JDK 8부터 도입된 새로운 날짜와 시간 라이브러리로, 기존의 java.util.Date
와 java.util.Calendar
의 문제점을 해결하기 위해 설계되었습니다. 이번 포스팅에서는 java.time
패키지에서 제공하는 날짜와 시간의 파싱(parsing)과 포맷팅(formatting) 기능에 대해 알아보겠습니다.
주요 내용
java.time
패키지 중 java.time.format
패키지에서 날짜와 시간을 파싱(parsing)하고 포맷팅(formatting)하는 DateTimeFormatter
클래스를 제공합니다.DateTimeFormatter
는 java.time
패키지에서 날짜와 시간을 문자열로 변환(format)하거나, 문자열을 날짜와 시간 객체로 변환(parse)하는 데 사용되는 클래스입니다.DateTimeFormatter
를 정의합니다.DateTimeFormatter
는 기본적으로 몇 가지 표준 포맷터를 제공하며, 이 포맷터들을 사용하여 날짜와 시간을 포맷팅하거나 파싱할 수 있습니다.DateTimeFormatter.ofPattern(String pattern)
메서드를 사용하여 사용자 정의 포맷터를 생성할 수 있습니다..parse(String, DateTimeFormatter)
메소드로 적용합니다..format(DateTimeFormatter)
메소드로 적용합니다.DateTimeFormatter
는 다양한 ISO 표준 포맷터를 제공하며, 이 포맷터들은 대부분의 경우에서 유용하게 사용될 수 있습니다. java.time
패키지에서 자주 사용되는 날짜와 시간 표현 방식은 ISO 8601이라는 국제 표준을 따릅니다. yyyy-MM-dd
형식으로 표현합니다. HH:mm:ss
형식으로 표현합니다. yyyy-MM-dd'T'HH:mm:ss
형식으로 날짜와 시간을 결합하여 표현합니다. Z
(Z는 UTC를 나타냄) 또는 +/-HH:mm
형식으로 오프셋을 추가할 수 있습니다. DateTimeFormatter.ISO_LOCAL_DATE
: yyyy-MM-dd
형식으로 날짜를 포맷팅합니다.DateTimeFormatter.ISO_LOCAL_TIME
: HH:mm:ss
형식으로 시간을 포맷팅합니다.DateTimeFormatter.ISO_LOCAL_DATE_TIME
: yyyy-MM-dd'T'HH:mm:ss
형식으로 날짜와 시간을 포맷팅합니다.DateTimeFormatter.BASIC_ISO_DATE
: yyyyMMdd
형식으로 날짜를 포맷팅합니다.import java.time.LocalDate;
import java.time.LocalTime;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
LocalDate date = LocalDate.of(2024, 8, 29);
LocalTime time = LocalTime.of(14, 30, 45);
LocalDateTime dateTime = LocalDateTime.of(date, time);
String formattedDate = date.format(DateTimeFormatter.ISO_LOCAL_DATE);
String formattedTime = time.format(DateTimeFormatter.ISO_LOCAL_TIME);
String formattedDateTime = dateTime.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
System.out.println("Formatted Date: " + formattedDate); // 출력: Formatted Date: 2024-08-29
System.out.println("Formatted Time: " + formattedTime); // 출력: Formatted Time: 14:30:45
System.out.println("Formatted DateTime: " + formattedDateTime); // 출력: Formatted DateTime: 2024-08-29T14:30:45
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
LocalDate date = LocalDate.of(2024, 8, 29);
LocalTime time = LocalTime.of(14, 30, 45);
LocalDateTime dateTime = LocalDateTime.of(date, time);
String formattedDate = date.format(DateTimeFormatter.ISO_LOCAL_DATE);
String formattedTime = time.format(DateTimeFormatter.ISO_LOCAL_TIME);
String formattedDateTime = dateTime.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
System.out.println("Formatted Date: " + formattedDate); // 출력: Formatted Date: 2024-08-29
System.out.println("Formatted Time: " + formattedTime); // 출력: Formatted Time: 14:30:45
System.out.println("Formatted DateTime: " + formattedDateTime); // 출력: Formatted DateTime: 2024-08-29T14:30:45
DateTimeFormatter
는 기본 제공되는 ISO 표준 포맷터 외에도, 사용자 정의 포맷 패턴을 지원합니다. DateTimeFormatter.ofPattern(String pattern)
메서드를 사용하여 사용자 정의 포맷터를 생성할 수 있습니다.import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
LocalDateTime dateTime = LocalDateTime.of(2024, 8, 29, 14, 30, 45);
DateTimeFormatter customFormatter = DateTimeFormatter.ofPattern("E, MMM d yyyy HH:mm:ss");
String formattedDateTime = dateTime.format(customFormatter);
System.out.println("Custom Formatted DateTime: " + formattedDateTime); // 출력: Custom Formatted DateTime: Thu, Aug 29 2024 14:30:45
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
String customDateTimeString = "Thu, Aug 29 2024 14:30:45";
DateTimeFormatter customFormatter = DateTimeFormatter.ofPattern("E, MMM d yyyy HH:mm:ss");
LocalDateTime parsedDateTime = LocalDateTime.parse(customDateTimeString, customFormatter);
System.out.println("Parsed DateTime: " + parsedDateTime); // 출력: Parsed DateTime: 2024-08-29T14:30:45
DateTimeFormatter
는 날짜와 시간 데이터를 포맷팅하거나 파싱할 때 사용할 수 있는 다양한 패턴을 지원합니다. y
: 연도 (최소 자릿수). 예: yyyy → 2024, yy → 24u
: 연도 (자릿수 강제). 예: uuuu → 2024M
: 월 (숫자). 예: M → 8, MM → 08MMM
: 월 (짧은 이름). 예: MMM → AugMMMM
: 월 (전체 이름). 예: MMMM → Augustd
: 일 (숫자). 예: d → 9, dd → 09D
: 연중 일 (1~365/366). 예: D → 241F
: 월중 주 (1~5). 예: F → 1 (해당 월의 첫 번째 주)w
: 연중 주 (1 ~ 52). 예: w → 27E
: 요일 (짧은 이름). 예: E → ThuEEEE
: 요일 (전체 이름). 예: EEEE → Thursdaya
: 오전/오후 표시. 예: a → PMH
: 24시간제 시 (0~23). 예: H → 14, HH → 14h
: 12시간제 시 (1~12). 예: h → 2, hh → 02m
: 분 (0~59). 예: m → 7, mm → 07s
: 초 (0~59). 예: s → 5, ss → 05S
: 밀리초 (1~9자리). 예: S → 5, SSSS → 5000z
: 시간대 이름. 예: z → PDTZ
: 시간대 오프셋. 예: Z → -0800X
: ISO 8601 시간대. 예: X → -08, XX → -0800, XXX → -08:00dd/MM/yyyy
: 29/08/2024yyyy-MM-dd
: 2024-08-29MMMM d, yyyy
: August 29, 2024EEE, MMM d, yyyy
: Thu, Aug 29, 2024HH:mm:ss
: 14:30:45hh:mm a
: 02:30 PMhh:mm:ss.SSS a
: 02:30:45.123 PMHH:mm:ss z
: 14:30:45 PDTyyyy-MM-dd HH:mm:ss
: 2024-08-29 14:30:45yyyy-MM-dd'T'HH:mm:ss
: 2024-08-29T14:30:45yyyy/MM/dd HH:mm:ss.SSS
: 2024/08/29 14:30:45.123yyyy-MM-dd'T'HH:mmXXX
: 2024-08-29T14:30+09:00yyyy-MM-dd'T'HH:mm:ssXXX
: 2024-08-29T14:30:45+09:00yyyy-MM-dd'T'HH:mm:ss.SSSXXX
: 2024-08-29T14:30:45.123+09:00yyyy-MM-dd HH:mm:ss Z
: 2024-08-29 14:30:45 -0800yyyy-MM-dd HH:mm:ss z
: 2024-08-29 14:30:45 PSTyyyy-MM-dd'T'HH:mm:ss.SSSXXX
: 2024-08-29T14:30:45.123+09:00import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class DateTimeFormatterExample {
public static void main(String[] args) {
LocalDateTime dateTime = LocalDateTime.of(2024, 8, 29, 14, 30, 45);
// 기본 날짜 포맷
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
String formattedDate = dateTime.format(dateFormatter);
System.out.println("Formatted Date: " + formattedDate); // 출력: Formatted Date: 29/08/2024
// 기본 시간 포맷
DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss");
String formattedTime = dateTime.format(timeFormatter);
System.out.println("Formatted Time: " + formattedTime); // 출력: Formatted Time: 14:30:45
// 사용자 정의 날짜 및 시간 포맷
DateTimeFormatter customFormatter = DateTimeFormatter.ofPattern("EEEE, MMMM d, yyyy h:mm a");
String customFormattedDateTime = dateTime.format(customFormatter);
System.out.println("Custom Formatted DateTime: " + customFormattedDateTime); // 출력: Thursday, August 29, 2024 2:30 PM
}
}
DateTimeFormatter
의 다양한 패턴을 이해하고 활용하면, 날짜와 시간을 원하는 형식으로 포맷팅하거나 파싱할 수 있습니다.