Java Instant 사용하기
Instant 란?
- Java 8에서 도입된 시간 API로,
UTC(협정 세계시)
기준의 시간을 나타내는 클래스 - 시간대와 무관하게 항상 동일한 시간을 표현하며, 주로 타임스탬프나 시간 기반 연산 사용
주요 특징
- UTC 기준: 모든 시간이 UTC 기준으로 표현
- nanosecond 정밀도: 초 단위와 나노초 단위의 정밀도를 모두 제공
- 불변 객체: 모든 시간 연산은 새로운
Instant
객체 반환 - 시간대 독립: 시간대 정보를 포함하지 않아 전 세계 어디서나 동일한 시간을 표현 가능
Usage
// 현재 시간 가져오기
val now = Instant.now()
// epochSecond 가져오기
val epochSecond = now.epochSecond
// 나노초 가져오기
val nanoSecond = now.nano
// 특정 시간의 Instant 생성
val specificTime = Instant.ofEpochSecond(1234567890)
// 시간 비교
val instant1 = Instant.ofEpochSecond(1234567890)
val instant2 = Instant.ofEpochSecond(1234567891)
val isBefore = instant1.isBefore(instant2)
val isAfter = instant1.isAfter(instant2)
// Instant -> LocalDateTime
val localDateTime = LocalDateTime.ofInstant(now, ZoneId.systemDefault());
// LocalDateTime -> Instant
Instant instant = localDateTime.toInstant(ZoneOffset.UTC);
주의 사항
- 시간대 변환:
Instant
는 시간대 정보가 없으므로, 특정 시간대로 변환할 때는ZoneId
를 명시적 지정 필요 - 정밀도: 나노초 단위의 정밀도를 제공하지만, 실제 시스템의 정밀도는 하드웨어에 따라 상이할 수 있음
- 성능:
Instant.now()
는 시스템 시계를 읽어오므로, 빈번한 호출은 시스템 부하 가능
LocalDateTime 차이점
- 시간대 처리:
Instant
: UTC 기준, 시간대와 무관LocalDateTime
: 시간대 정보 없음, 명시적 변환 필요
- 사용 목적:
Instant
: 타임스탬프, 시간 기반 연산LocalDateTime
: 로컬 시간 표현, 날짜/시간 조작
- 정밀도:
Instant
: 나노초 단위LocalDateTime
: 나노초 단위
Conclusion
Instant
는 시간대와 무관한 시간 표현이 필요한 경우에 특히 유용- 분산 시스템이나 타임스탬프 기반 연산에서
LocalDateTime
보다 더 적합한 시간 연산 가능 - 하지만, 사용자 인터페이스나 로컬 시간 표현이 필요한 경우에는
LocalDateTime
사용하는 것이 더 적절할 수 있음