LocalDateTime을 Timestamp(Epoch time, UTC millis)으로 변환하거나 Timestamp를 LocalDateTime으로 변환하는 방법에 대해서 알아보겠습니다.

1. LocalDateTime과 Timestamp

LocalDateTime

LocalDateTime은 Java8에서 추가된 클래스로, 날짜와 시간 정보를 다루는 클래스입니다.

Timestamp

Timestamp는 Epoch time 또는 Unix Epoch time라고도 하며, 1970년 1월 1일 00:00:00 UTC(협정 세계시)를 기준으로 현재까지 경과한 시간을 나타냅니다. Java에서 System.currentTimeMillis()으로 현재 시간의 Epoch time을 millisecond로 얻을 수 있습니다.

2. LocalDateTime을 Timestamp로 변환

다음과 같이 LocalDateTime을 Epoch time으로 변환할 수 있습니다.

  • LocalDateTime.toInstant(ZoneOffset.UTC) : UTC 시간대 기준으로 LocalDateTime을 Instant로 변환
  • Instant.toEpochMilli() : Instant가 갖고 있는 시간을 Epoch millisecond 시간으로 변환
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneOffset;

public class Example {

    public static void main(String[] args) {

        LocalDateTime localDateTime = LocalDateTime.now();
        Instant instant = localDateTime.toInstant(ZoneOffset.UTC);
        long timestamp = instant.toEpochMilli();
        System.out.println(timestamp);
    }
}

Output:

1693804522764

다른 방법으로, Timestamp.valueOf(localDateTime).getTime()으로 localDateTime을 Timestamp로 변환할 수 있습니다.

import java.sql.Timestamp;
import java.time.LocalDateTime;

public class Example {

    public static void main(String[] args) {

        LocalDateTime localDateTime = LocalDateTime.now();
        long timestamp = Timestamp.valueOf(localDateTime).getTime();
        System.out.println(timestamp);
    }
}

3. Timestamp를 LocalDateTime으로 변환

다음과 같이 Timestamp를 LocalDateTime으로 변환할 수 있습니다. Timestamp를 Instant로 변환하고, atZone()을 이용하여 현재 시스템에 설정된 지역으로 시간대(Time zone)를 적용합니다. 다른 시간대의 LocalDateTime로 변환하고 싶다면, 원하는 지역의 ZoneId를 입력하면 됩니다.

  • Instant.ofEpochMilli(timestamp) : timestamp를 Instant로 변환
  • instant.atZone(ZoneId.systemDefault()).toLocalDateTime() : System 설정 시간대 기준으로 LocalDateTime 객체 생성
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;

public class Example {

    public static void main(String[] args) {

        long timestamp = 1693804522764L;
        Instant instant = Instant.ofEpochMilli(timestamp);
        LocalDateTime localDateTime = instant.atZone(ZoneId.systemDefault()).toLocalDateTime();
        System.out.println(localDateTime);
    }
}

Output:

2023-09-04T14:15:22.764