Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java 9의 ofInstant() 메서드 완벽 가이드: Instant를 날짜·시간 객체로 손쉽게 변환하기

Java 9에서는 ofInstant() 메서드가 새롭게 도입되어 java.time.Instant 객체를 다양한 날짜·시간 타입으로 간편하게 변환할 수 있게 되었습니다. 이 메서드는 LocalDate, LocalTime, LocalDateTime 클래스에 포함된 정적(static) 메서드로, Instant 객체를 변환할 때 java.time.ZoneId 형태의 시간대 정보를 반드시 함께 전달해야 합니다.

Java 8에서는 Instant를 LocalDate나 LocalTime으로 변환하려면 instant.atZone(zone).toLocalDate()처럼 여러 단계를 거쳐야 했지만, Java 9부터는 ofInstant() 메서드 하나로 코드를 훨씬 더 간결하고 직관적으로 작성할 수 있습니다.

문법(Syntax)

public static LocalTime ofInstant(Instant instant, ZoneId zone)
public static LocalDate ofInstant(Instant instant, ZoneId zone)
public static LocalDateTime ofInstant(Instant instant, ZoneId zone)

예제 코드

import java.time.LocalDate;
import java.time.LocalTime;
import java.time.LocalDateTime;
import java.time.Instant;
import java.time.ZoneId;

public class OfInstantMethodTest {
   public static void main(String args[]) {
      Instant instant = Instant.parse("2020-02-05T02:35:15.245Z");
      System.out.println("Instant: " + instant);

      LocalDate ld = LocalDate.ofInstant(instant, ZoneId.of("Asia/Kolkata"));
      System.out.println("LocalDate: " + ld);

      LocalTime lt = LocalTime.ofInstant(instant, ZoneId.of("Asia/Kolkata"));
      System.out.println("LocalTime: " + lt);

      LocalDateTime ldt = LocalDateTime.ofInstant(instant, ZoneId.of("Asia/Kolkata"));
      System.out.println("LocalDateTime: " + ldt);
   }
}

실행 결과

Instant: 2020-02-05T02:35:15.245Z
LocalDate: 2020-02-05
LocalTime: 08:05:15.245
LocalDateTime: 2020-02-05T08:05:15.245

핵심 포인트 정리

위 예제에서 주목할 점은 시간대(time zone)가 결과에 미치는 영향입니다. 원본 Instant 값은 UTC 기준 02:35:15.245이지만, Asia/Kolkata(인도 표준시, UTC+5:30) 시간대로 변환되면서 시간이 08:05:15.245로 조정된 것을 확인할 수 있습니다. 즉, ofInstant() 메서드는 지정한 ZoneId에 맞춰 날짜와 시간을 자동으로 보정해 줍니다.

정리하면, Java 9의 ofInstant() 메서드는 다음과 같은 장점을 제공합니다.

- 간결성: atZone(), toLocalDate() 등의 체이닝 없이 한 번의 호출로 변환 가능
- 일관성: LocalDate, LocalTime, LocalDateTime 모두 동일한 방식으로 사용
- 시간대 처리: ZoneId를 명시적으로 전달하므로 시간대 관련 오류를 사전에 방지