12.1 LocalDate, LocalTime, Instant, Duration, Period 클래스

12.1.1 LocalDate와 LocalTime 사용

LocalDate 인스턴스는 시간을 제외한 날짜를 표현하는 불변 객체다. 특히 LocalDate 객체는 어떤 시간대 정보도 포함하지 않는다.

정적 팩토리 메서드 of로 LocalDate 인스턴스를 만들 수 있다.

LocalDate date = LocalDate.of(2024, 6, 10);
int year = date.getYear();
Month month = date.getMonth();
int day = date.getDayOfMonth();
LocalDate now = LocalDate.now();// 현재 날짜 정보

팩토리 메서드 now는 시스템 시계의 정보를 이용해서 현재 날짜 정보를 얻는다.

LocalDate today = LocalDate.now();

LocalDate가 제공하는 get 메서드에 TemporalField를 전달해서 정보를 얻는 방법도 있다. TemporalField는 시간 관련 객체에서 어떤 필드의 값에 접근할지 정의하는 인터페이스다.

int year = date.get(ChronoField.YEAR);

ChronoField는 TemporalField의 구현체이며 ChronoField의 열거자 요소를 이용해서 원하는 정보를 쉽게 얻을 수 있다.

시간에 대한 정보는 LocalTime 클래스로 표현할 수 있다. LocalTime도 정적 메서드 of로 인스턴스를 만들 수 있다.

LocalTime time = LocalTime.of(13, 45, 20);// 13:45:20
int hour = time.getHour();
int minute = time.getMinute();
int second = time.getSecond();

parse 메서드를 통해 날짜와 시간 문자열로 LocalDate와 LocalTime의 인스턴스를 만들 수 있다.

LocalDate date = LocalDate.parse("2024-06-10");
LocalTime time = LocalTime.parse("13:45:20");

12.1.2 날짜와 시간 조합

LocalDateTime은 LocalDate와 LocalTime을 쌍으로 갖는 복합 클래스다. 날짜와 시간을 모두 표현할 수 있으며 정적 메서드 of로 인스턴스 또한 만들 수 있다.

LocalDateTime dateTime = LocalDateTime.of(2024, Month.JUNE, 10, 13, 45, 20);
LocalDateTime dateTime2 = LocalDateTime.of(date, time);