142 lines
4.9 KiB
Markdown
142 lines
4.9 KiB
Markdown
# **자바 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` 패키지를 활용하면 **날짜와 시간을 더욱 쉽게 관리할 수 있다!** |