반응형
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 |