개발/자바

Java8 : LocalDate vs ZonedDateTime 차이

피터JK 2025. 2. 19. 12:42
728x90

LocalDate는 ZoneId 지정이 필요 없음

LocalDate는 날짜(연도, 월, 일)만 관리하는 클래스로, 시간대(ZoneId) 개념이 없음.
즉, LocalDate는 시간 정보 없이 날짜만 저장하므로 ZoneId를 따로 지정할 필요가 없습니다.


1. LocalDate.now() 동작 원리

LocalDate.now()를 호출하면, **시스템 기본 시간대(ZoneId.systemDefault())**에서 현재 날짜를 가져옴.

import java.time.LocalDate;

public class Main {
    public static void main(String[] args) {
        LocalDate today = LocalDate.now();
        System.out.println("현재 날짜: " + today); // 예: 2025-02-19
    }
}

출력 예시

현재 날짜: 2025-02-19
  • 여기서 LocalDate.now()는 시스템 기본 시간대에서 날짜 정보를 가져오지만, 시간대 영향을 받지 않음.

2. ZoneId가 필요한 경우

  • LocalDate는 시간 정보가 없기 때문에, ZoneId를 직접 지정할 필요가 없지만,
    특정 시간대 기준으로 날짜를 가져오고 싶다면 ZonedDateTime을 활용해야 합니다.
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.ZonedDateTime;

public class Main {
    public static void main(String[] args) {
        // 서울(Asia/Seoul) 시간대 기준으로 현재 날짜 가져오기
        LocalDate seoulDate = ZonedDateTime.now(ZoneId.of("Asia/Seoul")).toLocalDate();
        System.out.println("서울 기준 날짜: " + seoulDate);
    }
}

출력 예시

서울 기준 날짜: 2025-02-19
  • ZonedDateTime.now(ZoneId.of("Asia/Seoul")).toLocalDate()를 사용하면, 특정 시간대 기준으로 날짜를 가져올 수 있음.

3. LocalDate vs ZonedDateTime 차이

클래스  포함 정보  시간대(ZoneId) 필요 여부
LocalDate 연도, 월, 일 ❌ 필요 없음
LocalTime 시, 분, 초, 나노초 ❌ 필요 없음
LocalDateTime 연도, 월, 일, 시, 분, 초 ❌ 필요 없음
ZonedDateTime 연도, 월, 일, 시, 분, 초 + 시간대(ZoneId) ✅ 필요함

📌 결론:
✔️ LocalDate는 ZoneId 없이 날짜만 다룸.
✔️ 특정 시간대 기준으로 날짜를 가져오려면 ZonedDateTime을 사용해야 함. 

728x90