본문 바로가기

Java

[Java] LocalDateTime 정리

LocalDateTime이란?

자바에서 날짜와 시간을 함께 표현하기 위해 사용하는 클래스입니다.

 

LocalDateTime 특징

날짜(년, 월, 일), 시간(시, 분, 초, 나노초)을 포함하지만 시간대(TimeZone)을 포함하지 않습니다.

즉 정리하자면 LocalDateTime은 시간대를 포함하지 않기 때문에, 현재 실행 중인 시스템의 로컬 시간 기준으로 동작합니다.

※ 만약 시간대를 한국이 아닌 다른 시간대로 하고 싶다면 LocalDateTime.now(ZoneId.of("Asia/Seoul")); 으로 작성하시면 됩니다.

 

 

출력 형태

2025-05-09T14:30:00

 

 

주요 메서드 및 사용법

// 현재 날짜와 시간
LocalDateTime now = LocalDateTime.now();

// 특정 날짜와 시간 지정
LocalDateTime dateTime = LocalDateTime.of(2025, 5, 9, 14, 30);

 

 

날짜/시간 조작

LocalDateTime future = dateTime.plusDays(10);        // 10일 후
LocalDateTime past = dateTime.minusHours(2);         // 2시간 전
LocalDateTime changed = dateTime.withHour(18);       // 시(hour)만 변경

 

 

날짜 포맷팅/파싱

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formatted = dateTime.format(formatter);      // 문자열로 포맷
LocalDateTime parsed = LocalDateTime.parse("2025-05-09 14:30:00", formatter); // 문자열 -> LocalDateTime

 

 

날짜 추출

int year = dateTime.getYear();
int month = dateTime.getMonthValue();   // 1~12
int day = dateTime.getDayOfMonth();
int hour = dateTime.getHour();

DayOfWeek enum

요일 Enum getValue()
월요일 MONDAY 1
화요일 TUESDAY 2
수요일 WEDNESDAY 3
목요일 THURSDAY 4
금요일 FRIDAY 5
토요일 SATURDAY 6
일요일 SUNDAY 7

 

 

날짜 비교

isAfter() : 인자보다 미래 시간 일 때 true

isBefore() : 인자보다 과거 시간 일 때 true

isEquals() : 인자와 같은 시간 일 때 true

compareTo() : 인자보다 크면 1, 인자와 같으면 0, 인자보다 작으면 -1

public static void main(String[] args) throws IOException {
    LocalDateTime before = LocalDateTime.now().minusHours(10);
    LocalDateTime now = LocalDateTime.now();
    LocalDateTime after = LocalDateTime.now().plusHours(10);

    System.out.println("now.isAfter(before) : " + now.isAfter(before));
    System.out.println("now.isBefore(before) : " + now.isBefore(before));
    System.out.println("now.isEqual(before) : " + now.isEqual(before));
    System.out.println("now.compareTo(before) : " + now.compareTo(before));
    System.out.println("------------------------------------------");
    System.out.println("now.isAfter(now) : " + now.isAfter(now));
    System.out.println("now.isBefore(now) : " + now.isBefore(now));
    System.out.println("now.isEqual(now) : " + now.isEqual(now));
    System.out.println("now.compareTo(now) : " + now.compareTo(now));
    System.out.println("------------------------------------------");
    System.out.println("now.isAfter(after) : " + now.isAfter(after));
    System.out.println("now.isBefore(after) : " + now.isBefore(after));
    System.out.println("now.isEqual(after) : " + now.isEqual(after));
    System.out.println("now.compareTo(after) : " + now.compareTo(after));
}

 

결과

now.isAfter(before) : true
now.isBefore(before) : false
now.isEqual(before) : false
now.compareTo(before) : 1
------------------------------------------
now.isAfter(now) : false
now.isBefore(now) : false
now.isEqual(now) : true
now.compareTo(now) : 0
------------------------------------------
now.isAfter(after) : false
now.isBefore(after) : true
now.isEqual(after) : false
now.compareTo(after) : -1

 

LocalDateTime 주의사항

 

  • 시간대를 고려하지 않기 때문에 서버 간 시간 오차나 국제화 이슈가 있다면 ZonedDateTime 또는 OffsetDateTime을 사용해야 합니다.
  • 직렬화 시 표준 포맷(JSON 등)에서는 보통 ISO-8601 형식("2025-05-09T14:30:00")을 따릅니다.

 

 

'Java' 카테고리의 다른 글

[Java] BigInteger란? 사용법  (1) 2025.03.24
[Java] Queue 구현  (1) 2025.02.10
[Java] Deque 구현  (1) 2025.02.04
[Java] Stack 구현하기  (1) 2025.02.01
[Java] 실행 시간 측정  (3) 2025.02.01