[Java8] Chapter 5-2. Date와 Time 실습 (2)

 

🍊 Date, Time 예제 코드

1. Instant, 지금 이 순간을 기계 시간으로 표현하는 방법

시간을 재거나 메서드 실행 시간을 비교할 때 사용한다. 

사용자 친화적으로 출력하고 그리니치 평균 시간(GMT)을 기준으로 한다.

public static void main(String[] args) {
	Instant instant = Instant.now();
	
	System.out.println(instant);
}

// 2022-02-22T13:23:41.635622500Z

 

기준을 변경하고 싶다면 Zone을 지정해야 한다.

public static void main(String[] args) {
	Instant instant = Instant.now();
	ZoneId zone = ZoneId.systemDefault();
    
	System.out.println(zone);
	instant.atZone(zone);

	System.out.println(instant);
}

// Asia/Seoul
// 2022-02-22T13:27:19.845460800Z

 

 

2. LocalDateTime, 인류용 일시를 표현하는 방법

Local 이란 말에서 알 수 있듯 현재 시스템의 Zone 정보를 참고해서 로컬 시간을 가져온다.

이말이도르 미국에 있는 서버에서 코드가 돌아간다면 미국 Zone을 참고해 로컬 시간을 가져오니 주의해야 한다.

LocalDateTime now = LocalDateTime.now();
System.out.println(now);

// 2022-02-22T22:32:32.162044800

 

of를 사용하면 특정 시간을 만들 수도 있다.

LocalDateTime christmas = LocalDateTime.of(2022, Month.DECEMBER, 25, 0, 0);
System.out.println(christmas);

// 2022-12-25T00:00

 

 

3. ZonedDateTime, 특정 Zone의 시간을 보고싶은 경우
ZonedDateTime zonedDateTime = ZonedDateTime.now(ZoneId.of("Asia/Seoul"));
System.out.println(zonedDateTime);

// 2022-02-22T22:41:44.323580400+09:00[Asia/Seoul]

 

 

4. Period / Duration, 기간을 표현하는 방법

Period는 두 날짜 사이의 간격을 년, 월, 일 ... 단위로 표현한다.

LocalDate today = LocalDate.now();
LocalDate christmas = LocalDate.of(2022, Month.DECEMBER, 25);

Period period = Period.between(today, christmas);

System.out.println(period.getMonths() + "개월 " + period.getDays() + "일");

// 10개월 3일

총 일수를 계산하고 싶다면 ChronoUnit.DAYS.between을 사용하면 된다.

long days = ChronoUnit.DAYS.between(today, christmas);
System.out.println(days);

// 306

 

 

Duration은 두 시간 사이의 간격을 초, 나노 단위로 표현한다.

Instant now = Instant.now();
Instant plus = now.plus(10, ChronoUnit.SECONDS);

Duration duration = Duration.between(now, plus);

System.out.println(duration.getSeconds());

// 10

 

 

5. 파싱 또는 포매팅

LocalDateTime을 그냥 출력해도 읽기에 나쁘진 않다.

LocalDateTime now = LocalDateTime.now();
System.out.println(now);

// 2022-02-22T23:21:45.650759400

 

하지만 원하는 형태로 날짜, 시간으로 포맷팅이 필요할 때가 있으니 DateTimeFormatter를 제공한다.

Java에서 미리 정의한 포맷이 존재하니 참고해서 사용하면 좋을듯 하다.

LocalDateTime now = LocalDateTime.now();
DateTimeFormatter yyyyMMdd = DateTimeFormatter.ofPattern("yyyy/MM/dd");
System.out.println(now.format(yyyyMMdd));

// 2022/02/22

 

 

문자열을 LocalDate로 변환하는 파싱 기능도 제공한다.

DateTimeFormatter yyyyMMdd = DateTimeFormatter.ofPattern("MM/dd/yyyy");
LocalDate parse = LocalDate.parse("12/25/2022", yyyyMMdd);

System.out.println(parse);

// 2022-12-25

 

 

본 내용은 백기선님의 자바8 강의 내용입니다.

 

더 자바, Java 8 - 인프런 | 강의

자바 8에 추가된 기능들은 자바가 제공하는 API는 물론이고 스프링 같은 제 3의 라이브러리 및 프레임워크에서도 널리 사용되고 있습니다. 이 시대의 자바 개발자라면 반드시 알아야 합니다. 이

www.inflearn.com