Java - Date를 LocalDateTime으로 변환, LocalDateTime를 Date로 변환
java.util.Date를 java.time.LocalDateTime으로 변환하는 방법에 대해 알아본다.
Date
를 LocalDateTime
로 변환
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
LocalDateTime
를 Date
으로 변환
일부 레거시 코드를 지원하기 위해 이 변환를 사용하게 될 것이다. 새로운 개발 코드에서는 구지 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
유릴티리 클래스
아래 DateUtils
는 Date
와 LocalDate
, 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