Java - Date를 LocalDateTime으로 변환, LocalDateTime를 Date로 변환

java.util.Date를 java.time.LocalDateTime으로 변환하는 방법에 대해 알아본다.

DateLocalDateTime로 변환

Date.getTime() 메서드는 1970년 1월 1일 00:00:00 GMT 이후 경과된 millisecond인 epoch millisecond를 반환한다. LocalDateTime을 받아 오기 위해서는 먼저 사용자 위치의 zone offset 정보를 설정해야 지정된 zone offset에서 Instant를 받아 올 수 있다.

그런 다음 로컬 타임라인에서 주어진 Instant와 같은 연도, 월, 일 및 시간을 가진 LocalDateTime을 반환하는 Instant.toLocalDateTime() 메서드를 사용할 수 있다.

package com.devkuma.basic.datetime.convert;

import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;

public class ConvertDateToLocalDateTime {

    public static void main(String[] args) {
        Date todayDate = new Date();

        LocalDateTime localDateTime = Instant.ofEpochMilli(todayDate.getTime())
                                             .atZone(ZoneId.systemDefault())
                                             .toLocalDateTime();

        System.out.println(localDateTime);
    }
}

실행 결과:

2023-04-17T21:17:05.753

LocalDateTimeDate으로 변환

일부 레거시 코드를 지원하기 위해 이 변환를 사용하게 될 것이다. 새로운 개발 코드에서는 구지 Date 클래스를 사용할 이유가 없다.

package com.devkuma.basic.datetime.convert;

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;

public class ConvertDateToLocalDateTime {

    public static void main(String[] args) {
        LocalDateTime localDateTime = LocalDateTime.now();

        Date date = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());

        System.out.println(date);
    }
}

실행 결과:

Mon Apr 17 21:16:54 KST 2023

유릴티리 클래스

아래 DateUtilsDateLocalDate, LocalDateTime를 서로 변환하는 정적 메서드들 있는 유틸리티 클래스이다.

package com.devkuma.basic.datetime.convert;

import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;

public final class DateUtils {

    private DateUtils() {}

    public static Date toDate(LocalDate localDate) {
        return Date.from(localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
    }

    public static Date toDate(LocalDateTime localDateTime) {
        return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
    }

    public static LocalDate toLocalDate(Date date) {
        return Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDate();
    }

    public static LocalDateTime toLocalDateTime(Date date) {
        return Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDateTime();
    }
}

이 유틸리티 클래스를 사용하려면, 정적 메서드에 올바른 인수를 넣고 호출하기만 하면 된다.

package com.devkuma.basic.datetime.convert;

import java.time.LocalDateTime;
import java.util.Date;

public final class UseDateUtils {

    public static void main(String[] args) {
        Date date = DateUtils.toDate(LocalDateTime.now());

        System.out.println(date);

        LocalDateTime localDateTime = DateUtils.toLocalDateTime(date);

        System.out.println(localDateTime);
    }
}



최종 수정 : 2023-04-17