본문 바로가기

Java

[Java] #Time, Date, 시간, 날짜

반응형

 

Java time

  • JDK 1.8부터 추가
  • 불변이라는 특징
  • Calendar는 멀티 쓰레드 환경에 안전하지 않음. 변경 가능해서 안전하지 않다고 함
  • 주요 클래스
    • LocalTime → 시간 표현
    • LocalDate → 날짜 표현
    • LocalDateTime → 날짜 & 시간 표현
    • ZonedDateTime → LocalDateTime + Zone
    • Period → 날짜와 날짜 차이
    • Duration → 시간과 시간 차이
  • Instant 라는 클래스는 Date와 유사한대 날짜와 시간을 나노초 단위까지 표현하여 순서 비교하는데 유리

객체 생성

  • now → 생성
    LocalDate date = LocalDate.now();
    LocalTime time = LocalTime.now();
    LocalDateTime dateTime = LocalDateTime.now();
    ZonedDateTime dateTimeKr = ZonedDateTime.now();
  • of → 값 지정
    LocalDate date = LocalDate.of(2018, 10, 10);
    LocalTime time = LocalTime.of(10, 10, 10);
    LocalDateTime dateTime = LocalDateTime.of(date, time);
    ZonedDateTime dateTimeKr = ZonedDateTime.now(dateTime, ZoneId.of("Asia/Seoul"));

Temporal, TEMPORALccessor, Temporaladjust

  • LocalDate, LocalTime, LocalDateTime, ZonedDateTime은 시간 날짜를 표현하기 위해 인터페이스를 구현
  • Temporal→ puls, minus, isSupported
  • TemporalAccessor → range, get, getLong
  • TemporalAdjust → adustInto

TemporalAmount

  • Period, Duration은 TemporalAmount 인터페이스를 구현
  • TemporalAmount인지 아닌지만 구별 잘하면 됨.

TemporalUnit, TemporalField

  • TemporalUnit → 날짜 시간 단위를 정의
    • 이 인터페이스를 구현해놓은 것이 ChronoUnit(enum으로 되어 있음)
    • nano, second, minutes, hours, half_days...
  • TemporalField → 년, 월, 일 등 날짜와 시간 필드
    • 이 인터페이스를 구현해놓은 것이 ChronoField(enum으로 되어 있음)
    • SECOND_OF_DAY, MINUTE_OF_HOUR, MINUTE_OF_DAY....
LocalTime time = LocalTime.now();
int min = time.get(ChronoField.MINUTE_OF_DAY);      //1434 하루중에 몇분 째
int min2 = time.get(ChronoField.MINUTE_OF_HOUR);    //54 한시간 중 몇분 쨰

LocalTime, LocalDate

  • now → 현재 값 가져오기(생성)
  • of → 원하는 값 설정하여 가져오기(생성)
  • parse → 문자열을 날짜, 시간으로 변환
  • get, getXXXX → 원하는 필드 값 가져오기
    • getMonth(), getYear()....
  • withXXX → 필드의 값 변경
    • withYear(값), withMonth(값)...
  • plus → 필드 값을 더함
    • plus(TemporalAmount), plus(값, TemporalUnit)...
  • minus → 필드 값을 뺌
    • plus랑 비슷함
  • truncatedTo → 지정된 것보다 작은 단위의 필드를 0으로 만듬
    • LocalDate는 없는데 이유는 년,월,일은 0이 될수 없어서
    • localTime.truncatedTo(ChronoUnit.HOURS)
  • 비교
    • isAfter
    • isBefore
    • isEqual
    • compareTo

instant

  • EPOCH TIME(1970-01-01 00:00:00) 부터 경과된 시간을 나노초 단위로 표현
Instant now = instant.now();
    • 나노 초 (ns 또는 nsec으로 표기)는 십억 분의 1초, 즉 10-9초를 가리키며, 보통 RAM액세스 속도를 측정하는 단위로 사용된다.
    • 밀리 초 (ms 또는 msec으로 표기)는 천 분의 1초로서, 대개 하드디스크CD-ROM 플레이어의 액세스 속도나, 인터넷상에서 패킷이 움직이는 속도를 측정하는데 사용된다.
    • 마이크로 초 (μs로 표기)는 백만 분의 1초, 즉 10-6초이다.
    • 피코 초 (ps로 표기)는 10-12초이다.
    • 펨토 초 (fs로 표기)는 10-15초로서 레이저 기술에서 종종 사용되는 단위이다.
    • 애토 초는 10-18초로서 광자 연구에서 사용되는 용어이다.
  • Date로 변환 가능
  • Instant는 항상 UTC(+0:00) 시간대 기준이기 때문에 주의
    • 시간대를 고려해야 할 경우 OffsetDateTime 사용
    OffsetDateTime o = OffsetDateTime.ofInstant(Instant.now(),ZoneId.systemDefault());

LocalDateTime, ZonedDateTime

  • LocalDateTime + ZonedId → ZondedDateTime
LocalDateTime ldt = LocalDateTime.of(2018, 10, 10, 12, 23, 45);
ZondId zid = ZoneId.of("Asia/Seoul")
ZonedDateTime zdt = ldt.atZone(zid);

ZoneOffset

  • UTC와의 차이가 얼마나 있는지 확인
ZoneOffset zos = ZoneDateTime.now().getOffset();

OffsetDateTime

 

  • ZonedDateTime은 ZoneId로 구역을 표현
  • OffsetDateTime은 ZoneOffset로 구역을 표현

 

반응형

'Java' 카테고리의 다른 글

[Java] # Thread, 쓰레드  (1) 2018.04.16
[Java] #Formating, 포맷  (0) 2018.04.16