날짜와 시간
JDK 1.0
java.util 패키지
JDK 1.1
- 설계가 빈약
- static Calendar getInstance()
- 서기 달력외에 다른 체계 달력(불기)을 지역화 설정에 따라 객체 생성
- int get(날짜 시간 필드) : 날짜, 시간 조회
- void set(날짜 시간 필드, 값) : 날짜, 시간 변경
- 날짜 시간 변경시 원 객체가 변경 : 불변성 유지 X
: java.time 패키지에서 변경: 날짜 시간의 불변성 유지, 변경 할때마다 새로운 객체 반환
- add(...) : 날짜 시간의 가감
-> 메서드명이 모호 : java.time 패키지 : plus(), miuns()
- roll(...) : 날짜 시간의 가감
-설계(인터페이스X), 체계 부족(상수, 기능 분리X)
-날짜, 시간의 불변성 X, 변경시에 원래 객체가 변경(변경 전 데이터 확인 불가)
-메서드명의 모호함, 날짜 수치(월)의 모호함(월 - 0~11)
- JDK8
1. 설계의 보완
-인터페이스
Temporal, TemporalAccessor, TemporalAdjuster
-LocalDate, LocalTime, LocalDateTime, OffsetDateTime, Instant
TemporalAmount
-Period, Duration
TemporalField : 날짜 시간 필드
-ChronoField
TemporalUnit : 날짜, 시간 단위
-ChronoUnit
2. 날짜/시간의 불변성
- 날짜, 시간의 변경시 -> 새로운 객체 생성
3. 메서드 명칭에서 오는 모호함을 개선(plus, minus)
LocalDate : 날짜
LocalDateTime atTime(시간....) : 날짜 + 시간
-static LocalDate now() : 지금 현재 날짜
-static LocalDate of() : 직접 지정한 날짜
조회
int/long get(TemporalField ...)
LocalTime : 시간
LocalDateTime atTime(LocalDate ...) : 시간 + 날짜
LocalDateTime : 날짜(LocalDate) + 시간(LocalTime)
ZonedDateTime atZone(ZoneId ...) : 날짜시간 + 시간대
OffsetDateTime atOffset(ZoneOffset ...)
ZonedDateTime : 날짜와 시간(LocalDateTime) + 시간대(ZoneId - Asia/Seoul)
- 섬머 타임제 고려
OffsetDateTime : 날짜와 시간(LocalDateTime) + 시간대(ZoneOffset - +9)
Instant : EpochTime - 1970. 1. 1 자정부터(UTC+0) 1/1000 단위 카운트
참고) Timestamp - 초 단위 카운팅
Duration : 시간의 차이 (초, 나노 초)
between
until
Period : 날짜사이의 간격 (년, 월, 일)
between()
핵심클래스(LocalDate, LocalTime, LocalDateTime ...)
static parse(...)
format(): 자바 객체 -> 형식화된 문자열 변경
parse() : 형식화된 문자열 -> 자바 객체
TemporalUnit 인터페이스 - 단위
- ChronoUnit
ZoneOffset
1) LocalDate와 LocalTime
특정 필드의 값 가져오기 - get(), getXXX()
int get(필드 명);
ChronoField : 날짜, 시간 필드
필드의 값 변경하기 - with(), plus(), minus()
LocalDate with() : 날짜/시간 변경
LocalDate plus() : 날짜/시간 +
LocalDate minus() : 날짜/시간 -
날짜와 시간의 비교 - isAfter(), isBefore(), isEqual()
- compareTo() : 음수 - isBefore()
- compareTo() : 0 - isEqual()
- compareTo() : 양수 - isAfter()
Period와 Duration
객체 생성하기 - now(), of()
now() : 현재 날짜,시간
of(....)
Temporal과 TemporalAmount
Instant
파싱과 포맷
java.time.format