자바

JAVA 자바 java.time 패키지 / 날짜와 시간 객체 생성 : LocalDate / LocalTime / LocalDateTime / ZonedDateTime / Instant

알통몬_ 2017. 3. 15. 10:58
반응형

안녕하세요 알통몬입니다.

공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^ 

java.time 패키지

Date 클래스의 대부분의 메서드는 Deprecated 되었고, 

Date의 용도는 단순히 특정 시점의 날짜 정보를 저장하는 역할만을 했습니다. 

Calendar 클래스는 날짜와 시간 정보를 얻기엔 충분했지만,

 날짜와 시간을 조작하거나 비교하는 기능이 불충분합니다. 

자바 8부터 날짜와 시간으 나타내는 여러가지 API를 새롭게 추가됐습니다.  

이 API는 java.util 패키지에 없고 별도로 java.time 패키지와 하위 패키지로 제공됩니다.


패키지                 설명

java.time              날짜와 시간을 나타내는 핵심 API인 LocalDate,LocalTime,LocalDateTime

                        ,ZonedDateTime 을 포함합니다. 이 클래스들은 ISO-8601에 정의된 달력 

                        시스템에 기초함니다.

java.time.chrono     ISO-8601에 정의된 달력 시스템 이외에 다른 달력 시스템이 필요할 때

                       사용할 수 있는 API 들이 포함되어 있습니다.

java.time.format     날짜와 시간을 파싱하고  포맷팅하는 API들이 포함되어 있습니다.

java.time.temporal   날짜와 시간을 연산하기 위한 보조 API 들이 포함되어 있습니다.

java.time.zone        타임존을 지원하는 API 들이 포함되어 있습니다.



날짜와 시간 객체 생성

1. LocalDate         : 로컬 날짜 클래스

 날짜 정보만을 저장할 수 있습니다. LocalDate 객체는 두 가지 static 메서드를 얻을 수 있는데 

now()는 컴퓨터의 현재 날짜 정보를 저장한 LocalDate 객체를 리턴하고 

of() 는 매개값으로 주어진 날짜 정보를 저장한 LocalDate 객체를 리턴합니다.


 LocalDate currDate = LocalDate.now();

 LocalDate targetDate = LocalDate.of(int year, int month, int dayOfMonth);


2.LocalTime         : 로컬 시간 클래스

 시간 정보만을 저장할 수 있습니다. LocalTime 객체도 마찬가지로 두 가지 static 메서드를 얻을 수 있습니다.

 now()는 컴퓨터의 현재 시간 정보를 저장한 LocalTime 객체를 리턴하고 

of() 는 매개값으로 주어진 시간 정보를 저장한 LocalTime 객체를 리턴합니다.


 LocalTime currTime = LocalTime.now();

 LocalTime targetTime = LocalTime.of(int hour, int minute, int second, int nanoOfSecond);


3. LocalDateTime   : 로컬 날짜 및 시간 클래스 (1 + 2)

 LocalDateTime 는 LocalDate 와 LocalTime 를 결합한 클래스라고 보면 됩니다. 

날짜와 시간 정보를 모두 저장할 수 있습니다. 

LocalDateTime 객체도 마찬가지로 두 가지 static 메서드를 얻을 수 있습니다.

now()는 컴퓨터의 현재 날짜와 시간 정보를 저장한 LocalDateTime 객체를 리턴하고

 of() 는 매개값으로 주어진 날짜와 시간 정보를 저장한 LocalDateTime 객체를 리턴합니다.


LocalDateTime currTime = LocalDateTime.now();

 LocalDateTime targetTime = LocalDateTime.of(int year, int month, int dayOfMonth, int hour, int minute, int second, int nanoOfSecond);


4. ZonedDateTime  : 특정 타임존의  날짜와 시간 클래스

 ISO-8601 달력 시스템에서 정의하고 있는 타임존의 날짜와 시간을 저장하는 클래스입니다. 

저장 형태는 2016-01-08T12:56:09.017+09:00[Asia/Seoul]와 같이 

맨 뒤에 타임존에 대한 정보(+-존오프셋[존아이디]가 추가적으로 붙습니다. 

존오프셋 : 협정세계시(UTC)와 차이나는 시간을 말합니다.

ZonedDateTime 은 now() static 메서드에 ZoneId를 매개값으로 주고 얻을 수 있습니다.

 ZoneId는 of() 메서드를 얻을 수 있는데,

 of()의 매개값은 java.util.TimeZone의 getAvailableIds() 메서드가 리턴하는 유효한 값 중 하나입니다.


ZonedDateTime utcDateTime =ZonedDateTime.now(ZonedId.of("UTC"));

ZonedDateTime londonDateTime =ZonedDateTime.now(ZonedId.of("Europe/London"));

ZonedDateTime seoulDateTime =ZonedDateTime.now(ZonedId.of("Asia/Seoul"));


5. Instant   : 특정 시점의 Time-Stamp 클래스

 날짜와 시간의 정보를 얻거나 조작하는데 사용되지 않고, 특정 시점의 타임스탬프로 사용됩니다.

주로 특정한 두 시점 간의 시간적 웃너순위를 따질 때 사용합니다. 

java.util.Date와 가장 유사한 클래스이지만, 

차이점은 Date는 로컬 컴퓨터의 현재 날짜와 시간 정보가 기준이지만,

 Instant는 협정세계시(UTC)를 기준으로 합니다.


Instant instant1 = Instant.now();

Instant instant2 = Instant.now();

if(instant1.isBefore(instant2)) { System.out.println("instant1이 빠릅니다.");}

else if(instant1.isAfter(instant2)) { System.out.println("instant2가 빠릅니다.");}

else{System.out.println("동일한 시간입니다..");}

System.out.println("차이(nanos) :" instant1.until(instant2, ChronoUnit.NANOS));

반응형