LocalDate, LocalTime, Duration, Period 클래스
간단한 날짜와 시간 간격을 정의해 보자.
LocalDate와 LocalTime
- LocalDate 인스턴스는 시간을 제외한 날짜를 표현하는 불변 객체다.
- LocalDate 객체는 어떤 시간대 정보도 포함하지 않는다.
- 팩토리 메소드 now()는 시스템 시계의 정보를 이용해 현재 날짜 정보를 얻는다.
- LocalDate와 LocalTime은 게터 메서드를 제공한다.
LocalDate date = LocalDate.of(2017, 9, 21)
date.getYear()
LocalTime time = LocalTime.of(13, 45, 20); // 13:45:20
time.getHour(); // 13
time.getMinute(); // 45
time.getSecond(); // 20
날짜와 시간 조합
- LocalDateTime은 날짜와 시간을 모두 표현할 수 있다.
LocalDateTime dt1 = LocalDateTime.of(2017, Month.SEPTEMBER, 21, 13, 45, 20);
LocalDateTime dt2 = LocalDateTime.of(date, time);
Duration과 Period 정의
- Duration클래스는 between으로 두 시간 객체 사이의 지속시간을 만들 수 있다.
- Duration과 Period 클래스는 자신의 인스턴스를 만들 수 있도록 다양한 팩토리 메서드를 제공한다.
Period tenDays = Period.between(LocalDate.of(2017, 9, 11), LocalDate.of(2017, 9, 21));
Duration threeMinutes = Duration.ofMinutes(3);
Duration threeMinutes = Duration.of(3, ChronoUnit.MINUTES);
Period tenDays = Period.ofDays(10);
Period threeWeeks = Period.ofWeeks(3);
날짜 조정, 파싱, 포메팅
- withAttribute 메서드는 기존의 LocalDate를 바꾼 버전을 직접 간단하게 만들 수 있다.
- 다음처럼 지정된 시간을 추가하거나 뺄 수 있다.
LocalDate date1 = LocalDate.of(2017, 9, 21); // 2017-09-21
LocalDate date2 = date1.withYear(2011); // 2011-09-21
LocalDate date3 = date2.withDayOfMonth(25); // 2011-09-25
LocalDate date4 = date3.with(ChronoField.MONTH_OF_YEAR, 2); // 2011-02-25
LocalDate date1 = LocalDate.of(2017, 9, 21); // 2017-09-21
LocalDate date2 = date1.plusWeek(1); // 2017-09-28
LocalDate date3 = date2.minusYear(6); // 2011-09-28
LocalDate date4 = date3.plus(6, ChronoUnit.MONTHS); // 2012-03-28
plus minus 말고도 다양한 메서드를 지원해 준다.
TemporalAdjusters 사용하기
- 날짜와 시간 API는 다양한 상황에서 사용할 수 있도록 TemporalAdjuster를 제공한다.
- 필요한 기능이 없을 때는 쉽게 커스텀하여 구현할 수 있다.
LocalDate date1 = LocalDate.of(2014, 3, 18);
LocalDate date2 = date1.with(nextOrSame(DayOfWeek.SUNDAY));
LocalDate date3 = date2.with(lastDayOfMonth());
// 커스텀 구현
@FunctionalInterface
public interface TemporalAdjuster {
Temporal adjustInto(Temporal temporal);
}
'자바 > 모던 자바 인 액션' 카테고리의 다른 글
[모던 자바 인 액션] 14장. 자바 모듈 시스템 (0) | 2023.03.05 |
---|---|
[모던 자바 인 액션] 13장. 디폴트 메서드 (0) | 2023.02.24 |
[모던 자바 인 액션] 11장. null 대신 Optional 클래스 (0) | 2023.01.07 |
[모던 자바 인 액션] 10장. 람다를 이용한 도메인 전용 언어 (0) | 2022.12.27 |
[모던 자바 인 액션] 9장. 리팩터링, 테스팅, 디버깅 (0) | 2022.11.18 |