반응형
여승철
INTP 개발자
여승철
  • 분류 전체보기 (376)
    • CS (16)
      • 면접 준비 (7)
      • 운영체제 (0)
      • 네트워크 (2)
      • HTTP (6)
      • 스프링(Spring) IoC 컨테이너 (0)
      • 알고리즘 (1)
    • Web (13)
    • AWS (6)
    • Java (43)
    • JSP & Servlet (65)
      • 개념 (42)
      • 실습 (23)
    • Spring Framework (33)
    • Spring Boot (10)
    • Spring Data (22)
      • JPA (14)
      • Query DSL (7)
      • Redis (1)
    • Spring Security (9)
    • Spring Batch (4)
    • MyBatis (10)
    • Front-End (51)
      • JS (27)
      • Vue.js (17)
      • React (5)
      • JQuery (0)
      • d3.js (2)
    • DBMS (24)
      • SQL, RDBMS (16)
      • MongoDB (5)
      • Redis (3)
    • Kafka (3)
    • 리눅스 (Linux) (4)
    • 디자인 패턴 (3)
    • VCS (8)
    • API (0)
    • TOOL (3)
    • Reading Book (28)
      • 이펙티브 자바 (11)
      • Clean Code (10)
      • 1분 설명력 (4)
      • HOW TO 맥킨지 문제해결의 기술 (3)
    • C# (4)
    • NSIS (6)
    • ETC (11)

블로그 메뉴

  • 홈
  • 태그

인기 글

태그

  • 스트림
  • 디자인 패턴
  • JDBC
  • 이펙티브 자바
  • querydsl
  • HTTP
  • Spring Batch
  • 맥킨지
  • controller
  • jsp
  • ubuntu
  • 로그인
  • EC2
  • 환경 세팅
  • mybatis
  • servlet
  • Dao
  • JSTL
  • 게시판
  • 회원 관리

최근 댓글

최근 글

hELLO· Designed By 정상우.
여승철

INTP 개발자

Java 날짜 및 시간 포맷 다루기. SimpleDateFormat, DateTimeFormatter, FastDateFormat
Java

Java 날짜 및 시간 포맷 다루기. SimpleDateFormat, DateTimeFormatter, FastDateFormat

2024. 9. 24. 21:27
반응형

날짜와 시간을 문자열로 변환하거나, 문자열을 날짜와 시간 객체로 변환할 때 포맷을 지정해 줍니다. 이를 위해 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
    여승철
    여승철

    티스토리툴바