> For the complete documentation index, see [llms.txt](https://docs.sysout.co.kr/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.sysout.co.kr/base-language/java/java-3/java-1.8/java.time.md).

# java.time 패키지

## java.time 패키지

자바 1.8에서는 기존의 Date, Calendar의 단점을 보완하여 java.time 패키지를 추가하였습니다.

### 주요 클래스

| 클래스           | 설명                  |
| ------------- | ------------------- |
| LocalDate     | 날짜를 구하는 클래스입니다.     |
| LocalTime     | 시간을 구하는 클래스입니다.     |
| LocalDateTime | 날짜와 시간을 구하는 클래스입니다. |

### LocalDate 샘플 코드

```java
LocalDate date = LocalDate.now();
System.out.println(date.toString());
System.out.println(date.getYear());
System.out.println(date.getMonthValue());
System.out.println(date.getMonth());
System.out.println(date.getDayOfMonth());
System.out.println(date.getDayOfWeek());
```

**실행 결과**

```
2018-12-09
2018
12
DECEMBER
9
SUNDAY
```

### LocalTime 샘플 코드

```java
LocalTime time = LocalTime.now();
System.out.println(time.toString());
System.out.println(time.getHour());
System.out.println(time.getMinute());
System.out.println(time.getSecond());
System.out.println(time.getNano());
```

**실행 결과**

```
20:21:01.763193900
20
21
1
763193900
```

### LocalDate.of()를 이용하여 시간을 지정한 객체 생성

```java
LocalDate newYear = LocalDate.of(2019, 1, 1);
System.out.println(newYear.toString());
String week = newYear.getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.KOREA);
System.out.println("새해는 "+week+"에 시작합니다.");
```

실행 결과

```
2019-01-01
새해는 화요일에 시작합니다.
```

### DateTimeFormatter를 이용하여 날짜의 형식을 변경

[Java 8 API에서 DateTimeFormatter 살펴보기](https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html)

#### LocalDate 변경

```java
String time = LocalDate.now().format(DateTimeFormatter.ofPattern("y년 M월 d일"));
System.out.println("time = "+time);|
```

### LocalDateTime과 DateFormatter 예제

```java
LocalDateTime date = LocalDateTime.now();
String time = date.format(DateTimeFormatter.ofPattern("y년 M월 d일 E a h:mm:ss"));
System.out.println("time = "+time);
```

### Period를 활용하여 LocalDate 계산

Period를 이용하여 LocalDate간의 차이를 구할 수 있습니다. 아래 예제는 오늘부터 올해 크리스마스까지의 남은 날짜수를 구하는 예제입니다.

```java
LocalDate today = LocalDate.now();
LocalDate x_mas = LocalDate.of(today.getYear(), 12, 25);
Period period = Period.between(today, x_mas);

System.out.println("크리스마스까지 남은 일 수는 다음과 같습니다");        
System.out.println(period.getDays());
```

실행 결과

```
크리스마스까지 남은 일 수는 다음과 같습니다
15
```

### Duration을 활용하여 LocalDateTime 계산

시/분/초가 포함된 차이를 구하고 싶을 때에는 Period 대신 Duration을 사용합니다. 다음 예제는 Duration을 이용하여 LocalTime간의 차이를 구하는 예제입니다.

```java
LocalTime now = LocalTime.now();
LocalTime later = now.plusHours(1L);
System.out.println("now = "+now);
System.out.println("later = "+later);

Duration duration = Duration.between(now, later);
System.out.println("차이(초) = "+duration.getSeconds());
```

실행 결과

```
now = 21:00:43.972531300
later = 22:00:43.972531300
차이(초) = 3600
```
