Instant — 시간선 위의 순간(인스턴트)
Instant — 시간선 위의 순간(인스턴트)
시간선(time-line) 위의 단일 순간을 나타내는 불변 클래스예요.
본문
시그니처
public final class Instant extends Object
implements Temporal, TemporalAdjuster, Comparable<Instant>, Serializable
구현된 인터페이스: Serializable, Comparable<Instant>, Temporal, TemporalAccessor, TemporalAdjuster.
설명
이 클래스는 시간선 위의 단일 순간을 모델링해요. 애플리케이션에서 이벤트 타임스탬프를 기록하는 데 사용할 수 있어요.
Instant의 범위는 long보다 큰 수의 저장을 요구해요. 이를 위해 이 클래스는 에포크 초(epoch-seconds)를 나타내는 long과 항상 0에서 999,999,999 사이인 나노초(nanosecond-of-second)를 나타내는 int를 함께 저장해요. 에포크 초는 표준 Java 에포크인 1970-01-01T00:00:00Z부터 측정되며, 에포크 이후의 순간은 양수, 이전의 순간은 음수 값을 가져요. 에포크 초와 나노초 부분 모두 값이 클수록 시간선상에서 항상 더 나중이에요.
시간 척도 (Time-scale)
태양일의 길이는 인간이 시간을 재는 표준 방식이에요. 전통적으로 하루는 60분씩 24시간, 다시 60초씩 나뉘어 86,400초의 하루를 이뤘어요.
현대의 시간 측정은 원자 시계에 기반해요. 원자 시계는 세슘 원자의 전이를 기준으로 SI 초를 정확히 정의해요. 불행히도 지구가 자전함에 따라 하루의 길이는 변하고, 시간이 지나면서 지구가 느려짐에 따라 하루의 평균 길이도 점점 길어지고 있어요. 실제 하루의 길이는 측정으로만 알 수 있어요.
UTC 시간 척도는 UT1의 모든 추가 초를 윤초(leap-second)라고 하는 정수 초로 묶는 표준 접근 방식이에요. 윤초는 지구의 자전 변화에 따라 추가되거나 제거될 수 있어요. 현대 UTC 시간 척도는 1972년에 도입되었어요. 이 복잡성 때문에 Instant는 고정 소수점 구현보다는 정수 나노초를 기반으로 하는 등 자체적인 시간 표현을 사용해요.
또한 이 클래스를 사용할 때는 인스턴스 비교에 equals 메서드를 사용해야 해요.
주요 메서드
now()— 시스템 시계에서 현재 순간을 얻어요.ofEpochSecond(long epochSecond)— 1970-01-01T00:00:00Z 에포크부터의 나노초 수를 사용해Instant인스턴스를 얻어요.ofEpochMilli(long epochMilli)— 에포크의 밀리초 수를 사용해Instant인스턴스를 얻어요.parse(CharSequence text)— ISO-8601 텍스트에서Instant인스턴스를 얻어요.getEpochSecond()— 에포크 초 수를 얻어요.getNano()— 에포크 초 내의 나노초 부분을 얻어요.toEpochMilli()— 이 순간을 에포크 이후의 밀리초 수로 변환해요.plus(Duration duration)/minus(Duration duration)— 기간을 더하거나 뺀 이 순간의 복사본을 반환해요.isAfter(Instant otherInstant)/isBefore(Instant otherInstant)— 다른 순간보다 이후/이전인지 확인해요.compareTo(Instant otherInstant)— 이 순간을 다른 순간과 비교해요.