Duration
Duration (시간 기반 시간량)
'34.5초' 같은 시간 기반 시간량(time-based amount of time)을 나타내는 클래스예요. 이 클래스는 초(seconds)와 나노초(nanoseconds)로 시간의 양·길이를 모델링해요. 분·시간 같은 다른 기간 기반 단위로도 접근할 수 있어요.
본문
DAYS 단위도 쓸 수 있는데, 정확히 24시간과 같게 취급돼서 일광 절약 시간(daylight savings) 영향은 무시돼요. 날짜 기반의 동등 클래스는 Period를 보면 돼요.
물리적 기간은 무한 길이일 수 있어요. 실용성을 위해 기간은 Instant와 유사한 제약으로 저장돼요. 기간은 나노초 해상도를 쓰며 최댓값은 long에 담을 수 있는 초 수예요. 이는 우주의 현재 추정 나이보다 커요. 기간의 범위는 long보다 큰 수의 저장을 요구해요. 이를 위해 이 클래스는 초를 나타내는 long과 0에서 999,999,999 사이의 나노초 부분을 나타내는 int를 저장해요.
모델은 방향성이 있는 기간(directed duration)이므로 기간은 음수일 수 있어요. 기간은 '초'로 측정되지만, 이 초가 원자 시계에 기반한 과학적 'SI 초' 정의와 반드시 일치하지는 않아요. 이 차이는 윤초(leap-second) 근처에서 측정되는 기간에만 영향을 주고 대부분의 애플리케이션에는 영향을 주지 않아요.
public final class Duration
예를 들어 기간을 만들고 사용하는 코드예요.
Duration fiveSecs = Duration.ofSeconds(5);
Duration d = Duration.between(start, end);
long seconds = d.getSeconds();
int nanos = d.getNano();
이 클래스는 값 기반 클래스(value-based class)예요. 동일한 인스턴스는 서로 교환 가능하게 취급하고 동기화에 인스턴스를 사용하지 않아야 해요. 그렇게 하면 예측 불가능한 동작이 발생할 수 있어요(예: 향후 릴리스에서 동기화가 실패할 수 있음). 비교는 equals 메서드를 사용해야 해요.