자바 (Java) 8에서 다음과 같이 사용하면,


        Instant instant = new Date().toInstant();

        System.out.println(instant);


        String formatted = DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(instant);

        System.out.println(formatted);


다음과 같은 예외 (Exception)에 직면한다.


java.time.temporal.UnsupportedTemporalTypeException: Unsupported field: Year


Instant 객체에는 Year 정보가 없기 때문이다.


Year 정보를 포함하는 LocalDateTime 객체를 다음과 같이 생성하려고 하면,


        Instant instant = new Date().toInstant();

        System.out.println(instant);


        LocalDateTime localDateTime = LocalDateTime.from(instant);

        String formatted = DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(localDateTime);

        System.out.println(formatted);


다음과 같은 예외에 직면한다.


java.time.DateTimeException: Unable to obtain LocalDateTime from TemporalAccessor: 2014-09-02T10:05:09.766Z of type java.time.Instant


시간 대 (Time Zone) 정보가 없기 때문이다.


다음과 같이 사용하면 된다.


        Instant instant = new Date().toInstant();

        System.out.println(instant);


        LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());

        String formatted = DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(localDateTime);

        System.out.println(formatted);


        formatted = localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));

        System.out.println(formatted);


References:

http://docs.oracle.com/javase/tutorial/datetime/iso/instant.html

http://stackoverflow.com/questions/25561377/format-localdatetime-with-timezone-in-java8

Posted by izeye

댓글을 달아 주세요