개발/자바

Java8 : LocalDate, LocalTime, LocalDateTime 날짜 및 시간 관련 클래스

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

Java 8부터 도입된 java.time 패키지의 날짜 및 시간 관련 클래스입니다.
각 클래스는 불변(immutable)이며, java.time.ZoneId를 사용하여 한국 표준시(KST, UTC+9) 기준으로 설정할 수 있습니다.


1. LocalDate (날짜)

LocalDate는 연도, 월, 일 정보를 포함하지만 시간 정보는 포함하지 않는 클래스입니다.
한국 기준(ko_KR)에서는 yyyy-MM-dd 형식으로 날짜를 다룹니다.

사용 예제

import java.time.LocalDate;

public class LocalDateExample {
    public static void main(String[] args) {
        // 현재 날짜 (시스템 기본 시간대 기준)
        LocalDate today = LocalDate.now();
        System.out.println("현재 날짜: " + today); // 예: 2025-02-19

        // 특정 날짜 지정
        LocalDate customDate = LocalDate.of(2023, 12, 25);
        System.out.println("지정한 날짜: " + customDate); // 2023-12-25

        // 날짜 연산
        LocalDate nextWeek = today.plusWeeks(1);
        System.out.println("1주 후: " + nextWeek); // 예: 2025-02-26

        LocalDate lastMonth = today.minusMonths(1);
        System.out.println("1달 전: " + lastMonth); // 예: 2025-01-19

        // 날짜 비교
        boolean isBefore = today.isBefore(customDate);
        System.out.println("오늘이 2023-12-25 이전인가? " + isBefore); // false

        boolean isLeapYear = today.isLeapYear();
        System.out.println("윤년인가? " + isLeapYear); // 예: false (2025년은 윤년 아님)
    }
}

2. LocalTime (시간)

LocalTime은 시, 분, 초, 나노초 정보를 포함하지만 날짜 정보는 포함하지 않는 클래스입니다.
한국 기준(ko_KR)에서는 HH:mm:ss 형식으로 시간을 다룹니다.

사용 예제

import java.time.LocalTime;

public class LocalTimeExample {
    public static void main(String[] args) {
        // 현재 시간
        LocalTime now = LocalTime.now();
        System.out.println("현재 시간: " + now); // 예: 14:30:45.123456

        // 특정 시간 지정
        LocalTime customTime = LocalTime.of(15, 30, 0);
        System.out.println("지정한 시간: " + customTime); // 15:30:00

        // 시간 연산
        LocalTime nextHour = now.plusHours(1);
        System.out.println("1시간 후: " + nextHour);

        LocalTime thirtyMinutesAgo = now.minusMinutes(30);
        System.out.println("30분 전: " + thirtyMinutesAgo);

        // 시간 비교
        boolean isBefore = now.isBefore(customTime);
        System.out.println("현재 시간이 15:30 이전인가? " + isBefore);
    }
}

3. LocalDateTime (날짜 + 시간)

LocalDateTime은 날짜(LocalDate)와 시간(LocalTime)을 함께 포함하는 클래스입니다.
한국 기준(ko_KR)에서는 yyyy-MM-dd HH:mm:ss 형식으로 날짜와 시간을 다룹니다.

사용 예제

import java.time.LocalDateTime;

public class LocalDateTimeExample {
    public static void main(String[] args) {
        // 현재 날짜 및 시간
        LocalDateTime now = LocalDateTime.now();
        System.out.println("현재 날짜 및 시간: " + now); // 예: 2025-02-19T14:30:45.123456

        // 특정 날짜 및 시간 지정
        LocalDateTime customDateTime = LocalDateTime.of(2023, 12, 25, 10, 30, 0);
        System.out.println("지정한 날짜 및 시간: " + customDateTime); // 2023-12-25T10:30

        // 날짜 및 시간 연산
        LocalDateTime tomorrow = now.plusDays(1);
        System.out.println("내일 이 시간: " + tomorrow);

        LocalDateTime nextMonth = now.plusMonths(1);
        System.out.println("1달 후 이 시간: " + nextMonth);

        // 날짜 및 시간 비교
        boolean isAfter = now.isAfter(customDateTime);
        System.out.println("현재 시간이 2023-12-25T10:30 이후인가? " + isAfter);
    }
}

4. 날짜 및 시간 포맷 변환 (한국식)

한국(ko_KR) 기준으로 날짜와 시간을 "yyyy년 MM월 dd일 HH시 mm분 ss초" 형식으로 출력할 수 있습니다.

포맷 적용 예제

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class DateTimeFormatExample {
    public static void main(String[] args) {
        // 현재 날짜 및 시간
        LocalDateTime now = LocalDateTime.now();

        // 한국식 포맷
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy년 MM월 dd일 HH시 mm분 ss초", Locale.KOREAN);
        String formattedDate = now.format(formatter);

        System.out.println("한국식 포맷 날짜: " + formattedDate);
    }
}

출력 예시

한국식 포맷 날짜: 2025년 02월 19일 14시 30분 45초

5. LocalDate, LocalTime, LocalDateTime 차이점

클래스 설명 포함 정보
LocalDate 날짜만 다룸 연도, 월, 일
LocalTime 시간만 다룸 시, 분, 초, 나노초
LocalDateTime 날짜 + 시간 포함 연도, 월, 일, 시, 분, 초, 나노초

6. LocalDateTime을 LocalDate 또는 LocalTime으로 변환

LocalDateTime에서 날짜(LocalDate) 또는 시간(LocalTime)만 추출할 수 있습니다.

변환 예제

import java.time.LocalDateTime;
import java.time.LocalDate;
import java.time.LocalTime;

public class LocalDateTimeConversion {
    public static void main(String[] args) {
        LocalDateTime now = LocalDateTime.now();

        // 날짜만 추출
        LocalDate date = now.toLocalDate();
        System.out.println("날짜 부분: " + date);

        // 시간만 추출
        LocalTime time = now.toLocalTime();
        System.out.println("시간 부분: " + time);
    }
}

출력 예시

날짜 부분: 2025-02-19
시간 부분: 14:30:45.123456

7. 시간대(TimeZone) 고려

LocalDateTime은 시간대 정보(ZoneId)가 없음.
시간대를 포함하려면 ZonedDateTime 또는 OffsetDateTime을 사용해야 합니다.

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;

public class ZonedDateTimeExample {
    public static void main(String[] args) {
        LocalDateTime now = LocalDateTime.now();
        ZonedDateTime seoulTime = now.atZone(ZoneId.of("Asia/Seoul"));
        
        System.out.println("서울 시간대 적용: " + seoulTime);
    }
}

출력 예시

서울 시간대 적용: 2025-02-19T14:30:45.123456+09:00[Asia/Seoul]

🔹 결론

  • LocalDate → 날짜만 다룸 (연도, 월, 일)
  • LocalTime → 시간만 다룸 (시, 분, 초)
  • LocalDateTime → 날짜 + 시간 포함 (연도, 월, 일, 시, 분, 초)
  • 한국(ko_KR) 기준 날짜/시간 포맷은 "yyyy년 MM월 dd일 HH시 mm분 ss초" 사용
  • LocalDateTime에서 LocalDate, LocalTime으로 변환 가능
  • 시간대를 포함하려면 ZonedDateTime을 사용

📌 Java 8+의 날짜/시간 클래스는 불변 객체이므로 thread-safe하고 성능이 좋음! 

728x90