java.time패키지
패키지 | 설명 |
java.time | 날짜와 시간을 다루는데 필요한 핵심 클래스들을 제공 |
java.time.chrono | 표준(ISO)이 아닌 달력 시스템을 위한 클래스들을 제공 |
jave.time.format | 날짜와 시간을 파싱하고, 형식화하기 위한 클래스들을 제공 |
jave.time.temporal | 날짜와 시간의 필드(field)와 단위(unit)를 위한 클래스들을 제공 |
jave.time.zone | 시간대(time-zone)와 관련된 클래스들을 제공 |
위 패키지에 속한 클래스들은 String 클래스처럼 불변이다
Calendar와 다르게 날짜와 시간을 별도의 클래스로 분리했다
LocalDate + LocalTime -> LocalDateTime
LocalDateTime+시간대 -> ZonedDateTime
java.time 패키지 클래스의 객체 생성
now() 현재 날짜와 시간을 저장하는 객체 생성
LocalDateTime.now()
of() 해당 필드의 값을 순서대로 지정하여 사용한다
LocalDateTime.of(dateTime, ZoneId.of("Asia/Seoul"));
Temporal과 TemporalAmount
Temporal, TemporalAccessor, TemporalAdjuster를 구현한 클래스 |
LocalDate, LocalTime, LocalDateTime, ZonedDateTime, Instant 등 |
TemporalAmount를 구현한 클래스 |
Peroid, Duration |
LocalDate와 LocalTime
static 메서드이며 now()와 of()를 사용하여 객체를 생성한다
parse()를 이용하여 문자열을 날짜와 시간으로 변환할 수 있다
특정필드의 값 가져오기
get(), getLong() //int타입의 범위를 넘었을 때 사용
필드의 값 변경
with() 원하는 필드 직접 지정
LocalDate with(TemporalField field, long newValue)
plus() minus() -더하기 빼기
truncatedTo() 지정된 것보다 작은 단위의 필드를 0으로 만든다
날짜와 시간의 비교
compareTo()로 비교가 가능하지만, 아래의 메서드로 편하게 비교할 수 있다
isAfter(), isBefore()
isEqual() 연표가 다른 두 날짜를 비교할 때 사용 equals()와 결과는 같다
Instant
에포크 타임부터 경과된 시간을 나노초 단위로 표현한다
now()와 ofEpochSecond()를 사용한다
Instant와 Date간의 변환
Instant -> Date : static Date from(Instant instant)
Date -> Instant : Instant toInstant()
Period : 두 날짜간의 차이를 표현
Duration : 시간의 차이를 표현
Period와 Duration의 활용
between() 두 날짜간의 차이 //static 메서드
until() 위와 같은 일을 한다 //instance 메서드
다른 단위로 변환
클래스 | 메서드 | 설명 |
Period | long toTotalMonths() | 년월일을 월단위로 변환해서 반환(일 단위는 무시) |
Duration | long toDays() | 일단위로 변환해서 반환 |
long toHours() | 시간단위로 변환해서 반환 | |
long toMinutes() | 분단위로 변환해서 반환 | |
long toMillis() | 천분의 일초 단위로 변환해서 반환 | |
long toNanos() | 나노초 단위로 변환해서 반환 |
파싱과 포맷
parsint(파싱) : 날짜와 시간을 원하는 형식으로 출력하고 해석
formatting(형식화) : DateTimeFormatter가 핵심으로 사용된다
출력형식 직접 정의하기
DateTimeFormatter의 ofPattern()으로 원하는 출력형식을 직접 작성할 수 있다
문자열을 날짜와 시간으로 파싱하기
문자열을 날짜 또는 시간으로 변환하려면 static 메서드 parse()를 사용한다