
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의 다양한 패턴을 이해하고 활용하면, 날짜와 시간을 원하는 형식으로 포맷팅하거나 파싱할 수 있습니다.