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

Java에서 현재 날짜/시간을 밀리초 단위로 가져오는 방법 총정리

Java에서 현재 날짜와 시간을 밀리초 단위로 얻어야 하는 경우가 종종 있습니다. 예를 들어 실행 시간 측정, 타임스탬프 생성, 고유 ID 생성 등이 대표적인 활용 사례입니다. Java에서는 Date, Calendar, Instant 클래스를 활용해 이 값을 손쉽게 구할 수 있습니다.

여기서 말하는 밀리초 값은 에포크(epoch) 시간을 기준으로 합니다. 에포크란 1970년 1월 1일 00:00:00 GMT를 의미하며, 이 시점부터 현재까지 경과한 시간을 밀리초(1/1000초) 단위의 숫자로 표현한 것입니다.

1. Date 클래스의 getTime() 메서드

java.util.Date 클래스의 getTime() 메서드는 에포크 시간(1970년 1월 1일 00:00:00 GMT)으로부터 경과한 밀리초 수를 조회하여 반환합니다.

예제 코드

import java.util.Date;
public class Sample {
    public static void main(String args[]){
        // Date 객체 생성
        Date date = new Date();
        long msec = date.getTime();
        System.out.println("Milli Seconds: " + msec);
    }
}

실행 결과

Milli Seconds: 1605160094688

2. Calendar 클래스의 getTimeInMillis() 메서드

java.util.Calendar 클래스의 getTimeInMillis() 메서드 역시 에포크 시간(1970년 1월 1일 00:00:00 GMT)으로부터 경과한 시간을 밀리초 단위로 반환합니다.

예제 코드

import java.util.Calendar;
public class Sample {
    public static void main(String args[]){
        // Calendar 객체 생성
        Calendar cal = Calendar.getInstance();
        long msec = cal.getTimeInMillis();
        System.out.println("Milli Seconds: " + msec);
    }
}

실행 결과

Milli Seconds: 1605160934357

3. Instant 클래스의 toEpochMilli() 메서드

Java 8부터 도입된 java.time API에서는 Instant 클래스의 toEpochMilli() 메서드를 사용할 수 있습니다. 아래 예제는 ZonedDateTime 객체를 Instant로 변환한 뒤 에포크 기준 밀리초를 구하는 방식입니다.

예제 코드

import java.time.Instant;
import java.time.ZonedDateTime;
public class Sample {
    public static void main(String args[]){
        // ZonedDateTime 객체 생성
        ZonedDateTime obj = ZonedDateTime.now();
        Instant instant = obj.toInstant();
        long msec = instant.toEpochMilli();
        System.out.println("Milli Seconds: " + msec);
    }
}

실행 결과

Milli Seconds: 1605162474464

어떤 방법을 선택해야 할까?

세 가지 방법 모두 동일하게 에포크 기준 밀리초를 반환하지만, 상황에 따라 적합한 방법이 다릅니다.

  • Date.getTime(): 간단하고 직관적이지만, 레거시 API에 해당하며 가변(mutable) 객체라는 점에 유의해야 합니다.
  • Calendar.getTimeInMillis(): 날짜 계산이나 필드 조작이 필요한 경우 유용하지만, 마찬가지로 레거시 API입니다.
  • Instant.toEpochMilli(): Java 8 이상 환경이라면 불변(immutable) 객체이고 스레드에 안전한 최신 방식으로 권장됩니다.

새로운 프로젝트라면 java.time 패키지의 Instant를 사용하는 것이 가장 좋은 선택입니다.