# **자바 Date-Time API 쉽게 배우기** ## **1. Date-Time API란?** 자바에서 날짜와 시간을 다루는 API는 크게 두 가지가 있다. 1. `java.util.Date`, `java.util.Calendar` (구버전, 사용 비추천) 2. `java.time` 패키지 (Java 8 이후, 최신 API) Java 8부터 `java.time` 패키지가 추가되면서 날짜와 시간을 **더 직관적이고 강력하게 다룰 수 있게 되었다.** 이번 글에서는 `java.time` 패키지를 중심으로 설명하겠다. --- ## **2. 주요 클래스 및 메서드 정리** ### **(1) `LocalDate` (날짜만 다루는 클래스)** | 메서드 | 설명 | |--------|------------------------------| | `now()` | 현재 날짜 가져오기 | | `of(year, month, dayOfMonth)` | 특정 날짜 생성 | | `plusDays(n)`, `minusDays(n)` | n일 더하기 / 빼기 | | `getYear()`, `getMonth()`, `getDayOfMonth()` | 연도, 월, 일 가져오기 | | `isBefore(date)`, `isAfter(date)` | 날짜 비교 | **예제 코드** ```java LocalDate today = LocalDate.now(); System.out.println(today); // 2025-03-06 LocalDate specificDate = LocalDate.of(2025, 12, 25); System.out.println(specificDate); // 2025-12-25 LocalDate nextWeek = today.plusDays(7); System.out.println(nextWeek); // 2025-03-13 ``` --- ### **(2) `LocalTime` (시간만 다루는 클래스)** | 메서드 | 설명 | |--------|------------------------------| | `now()` | 현재 시간 가져오기 | | `of(hour, minute, second)` | 특정 시간 생성 | | `plusHours(n)`, `minusMinutes(n)` | 시간 또는 분 더하기 / 빼기 | | `getHour()`, `getMinute()`, `getSecond()` | 시, 분, 초 가져오기 | **예제 코드** ```java LocalTime now = LocalTime.now(); System.out.println(now); // 14:30:15 (예시) LocalTime meetingTime = LocalTime.of(10, 30); System.out.println(meetingTime); // 10:30 LocalTime afterOneHour = now.plusHours(1); System.out.println(afterOneHour); // 15:30:15 (예시) ``` --- ### **(3) `LocalDateTime` (날짜 + 시간)** | 메서드 | 설명 | |--------|------------------------------| | `now()` | 현재 날짜와 시간 가져오기 | | `of(LocalDate, LocalTime)` | 특정 날짜와 시간 생성 | | `plusDays(n)`, `plusHours(n)` | 날짜/시간 더하기 | | `getYear()`, `getMonth()`, `getDayOfMonth()` | 날짜 정보 가져오기 | **예제 코드** ```java LocalDateTime now = LocalDateTime.now(); System.out.println(now); // 2025-03-06T14:30:15 (예시) LocalDateTime eventTime = LocalDateTime.of(2025, 12, 25, 18, 30); System.out.println(eventTime); // 2025-12-25T18:30 ``` --- ### **(4) `ZonedDateTime` (시간대 정보 포함)** | 메서드 | 설명 | |--------|------------------------------| | `now(ZoneId.of("Asia/Seoul"))` | 특정 시간대의 현재 시간 가져오기 | | `of(year, month, day, hour, min, sec, ZoneId.of("UTC"))` | 특정 시간대의 날짜/시간 생성 | **예제 코드** ```java ZonedDateTime seoulTime = ZonedDateTime.now(ZoneId.of("Asia/Seoul")); System.out.println(seoulTime); // 2025-03-06T14:30:15+09:00[Asia/Seoul] ``` --- ### **(5) 날짜 포맷 변환 (`DateTimeFormatter`)** | 메서드 | 설명 | |--------|------------------------------| | `ofPattern("yyyy-MM-dd HH:mm")` | 날짜/시간 형식 지정 | | `format(DateTimeFormatter formatter)` | 날짜/시간을 문자열로 변환 | | `parse(String, DateTimeFormatter formatter)` | 문자열을 날짜/시간으로 변환 | **예제 코드** ```java LocalDateTime now = LocalDateTime.now(); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"); String formattedDate = now.format(formatter); System.out.println(formattedDate); // 2025-03-06 14:30 ``` --- ### **(6) 날짜 차이 계산 (`Duration`, `Period`)** | 클래스 | 설명 | |--------|------------------------------| | `Duration.between(time1, time2)` | 시간 차이 계산 (초, 분, 시간 단위) | | `Period.between(date1, date2)` | 날짜 차이 계산 (년, 월, 일 단위) | **예제 코드** ```java LocalDate date1 = LocalDate.of(2025, 1, 1); LocalDate date2 = LocalDate.of(2025, 3, 6); Period period = Period.between(date1, date2); System.out.println(period.getMonths() + "개월 " + period.getDays() + "일"); // 2개월 5일 LocalTime time1 = LocalTime.of(10, 0); LocalTime time2 = LocalTime.of(12, 30); Duration duration = Duration.between(time1, time2); System.out.println(duration.toHours() + "시간 " + duration.toMinutes() + "분"); // 2시간 30분 ``` --- ## **3. 정리** ✅ **`LocalDate`** : 날짜만 다룸 (`2025-03-06`) ✅ **`LocalTime`** : 시간만 다룸 (`14:30:15`) ✅ **`LocalDateTime`** : 날짜 + 시간 (`2025-03-06T14:30:15`) ✅ **`ZonedDateTime`** : 시간대 정보 포함 (`+09:00[Asia/Seoul]`) ✅ **`DateTimeFormatter`** : 날짜 형식 변환 (`yyyy-MM-dd HH:mm`) ✅ **`Period` / `Duration`** : 날짜/시간 차이 계산 자바의 `java.time` 패키지를 활용하면 **날짜와 시간을 더욱 쉽게 관리할 수 있다!**