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
'개발 > 자바' 카테고리의 다른 글
| Java 7 이하에서 날짜 및 시간 관련 클래스 (0) | 2025.02.19 |
|---|---|
| Java8 : LocalDate vs ZonedDateTime 차이 (0) | 2025.02.19 |
| Java의 Wrapper 클래스 개요 및 차이점 (0) | 2025.02.19 |
| Java 14 switch 표현식 (switch expression) (0) | 2025.02.18 |
| Java 8의 Predicate 인터페이스 (0) | 2025.02.18 |