Period — 날짜 기반 기간(연·월·일)

Period — 날짜 기반 기간(연·월·일)

ISO-8601 달력 체계에서 '2 years, 3 months and 4 days' 같은 날짜 기반의 시간 양을 나타내는 클래스예요.

출처: Java API Reference

본문

시그니처

public final class Period extends Object
    implements ChronoPeriod, Serializable

구현된 인터페이스: Serializable, ChronoPeriod, TemporalAmount.

설명

이 클래스는 연, 월, 일 단위의 시간 양(quantity)을 모델링해요. 이 클래스의 시간 기반(time-based) 등가물은 Duration을 참고하세요.

DurationPeriodZonedDateTime에 더할 때 일광 절약 시간(DST) 처리 방식이 달라요. Duration은 정확한 초 수를 더하므로 1일의 기간(duration)은 항상 정확히 24시간이에요. 반면 Period는 개념적인 하루를 더해서 로컬 시간을 유지하려고 해요.

예를 들어 DST 갭 전날 저녁 18:00에 1일의 기간(period)과 1일의 기간(duration)을 더하는 경우를 생각해 보세요. Period는 개념적인 하루를 더해 다음 날 18:00의 ZonedDateTime이 돼요. 반면 Duration은 정확히 24시간을 더해 (1시간 DST 갭을 가정하면) 다음 날 19:00의 ZonedDateTime이 돼요.

Period의 지원 단위는 YEARS, MONTHS, DAYS예요. 세 필드는 모두 항상 존재하지만 0으로 설정될 수 있어요.

이 기간은 방향 있는(directed) 시간 양으로 모델링되므로, 기간의 개별 부분은 음수일 수 있어요.

이 클래스는 값 기반(value-based) 클래스예요. 프로그래머는 서로 같은 인스턴스를 교환 가능하게 취급해야 하며, 동기화에 인스턴스를 사용하면 안 돼요. 비교에는 equals 메서드를 사용해야 해요.

주요 메서드

  • of(int years, int months, int days) — 연, 월, 일 수를 가진 Period를 얻어요.
  • ofDays(long days) / ofMonths(long months) / ofYears(long years) — 지정한 단위의 Period를 얻어요.
  • between(LocalDate startDateInclusive, LocalDate endDateExclusive) — 두 날짜 사이의 연·월·일 수로 구성된 Period를 얻어요.
  • parse(CharSequence text) — ISO-8601 형식 PnYnMnD에서 Period를 얻어요.
  • getYears() / getMonths() / getDays() — 연/월/일 수를 얻어요.
  • plus(TemporalAmount amountToAdd) — 지정한 양을 더한 이 기간의 복사본을 반환해요.
  • isZero() — 이 기간의 세 단위가 모두 0이면 true를 반환해요.
  • addTo(Temporal temporal) — 이 기간을 지정한 temporal 객체에 더해요.

더 알아보기 (Learn more)