HOME > java > time

Java - ZonedDateTime을 TimeStamp로 변경하는 방법

By JS | 31 Oct 2019

java.time.ZonedDateTimejava.sql.Timestamp으로 변경하는 방법을 소개합니다. 또는 반대로 변경하는 방법을 소개합니다.

ZonedDateTime은 JAVA8에서 추가된 Time API입니다. LocalDateTime와는 다르게 ZonedDateTime는 zone 정보가 있어서 UTC 기준으로 얼마의 시차가 나는지 알 수 있습니다.

ZonedDateTime => Timestamp

ZonedDateTime에서 Timestamp로 변환하는 방법입니다.

package time;

import java.sql.Timestamp;
import java.time.ZoneId;
import java.time.ZonedDateTime;

public class Example03 {
    public static void main(String args[]) {
        ZonedDateTime utcDateTime = ZonedDateTime.now(ZoneId.of("UTC"));
        System.out.println(utcDateTime);

        // ZonedDateTime => Timestamp 변환
        Timestamp timestamp = Timestamp.valueOf(utcDateTime.toLocalDateTime());
        System.out.println(timestamp);

        // 1970/01/01 00:00:00 GMT 부터 millisecond로 계산한 시간 출력
        System.out.println(timestamp.getTime());

        // ZonedDateTime을 Instant 객체로 변환 => Timestamp 변환
        Timestamp timestamp2 = Timestamp.from(utcDateTime.toInstant());
        System.out.println(timestamp2);
    }
}

결과

2019-10-31T00:09:01.962Z[UTC]
2019-10-31 00:09:01.962
1572448141962
2019-10-31 09:09:01.962

Timestamp => ZonedDateTime

Timestamp에서 ZonedDateTime로 변환하는 방법입니다.

package time;

import java.sql.Timestamp;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;

public class Example04 {
    public static void main(String args[]) {

        Timestamp timestamp = Timestamp.from(Instant.now());
        System.out.println(timestamp);

        // Timestamp => LocalDateTime 변환
        LocalDateTime noTimeZoneLocalDateTime = timestamp.toLocalDateTime();

        // LocalDateTime => ZonedDateTime (Zone = Seoul)
        ZonedDateTime zonedDateTime =
            noTimeZoneLocalDateTime.atZone(ZoneId.of("Asia/Seoul"));
        System.out.println(zonedDateTime);

        // LocalDateTime => ZonedDateTime (Zone = UTC)
        ZonedDateTime zonedDateTime1 =
            noTimeZoneLocalDateTime.atZone(ZoneId.of("UTC"));
        System.out.println(zonedDateTime1);

        // LocalDateTime => ZonedDateTime (Zone = "-06:00")
        ZonedDateTime zonedDateTime2 =
            noTimeZoneLocalDateTime.atZone(ZoneId.of("-06:00"));
        System.out.println(zonedDateTime2);
    }
}

결과

2019-10-31 09:10:35.032
2019-10-31T09:10:35.032+09:00[Asia/Seoul]
2019-10-31T09:10:35.032Z[UTC]
2019-10-31T09:10:35.032-06:00

참고