나는 변환 할 java.time.LocalDate
에 java.util.Date
유형입니다. 날짜를로 설정하고 싶습니다 JDateChooser
. 또는 날짜를 지원하는 날짜 선택기가 java.time
있습니까?
나는 변환 할 java.time.LocalDate
에 java.util.Date
유형입니다. 날짜를로 설정하고 싶습니다 JDateChooser
. 또는 날짜를 지원하는 날짜 선택기가 java.time
있습니까?
답변:
Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
날짜 선택자가 시스템 기본 시간대를 사용하여 날짜를 문자열로 변환한다고 가정합니다.
atStartOfDay()
내가 이해하는 것처럼 날짜 값을 변경하기 때문에 피할 수 있습니까?
최신 java.time
클래스를 java.util.Date
객체로 또는 그 반대로 변환하는 데 사용하는 유틸리티 클래스는 다음과 같습니다 .
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
public class DateUtils {
public static Date asDate(LocalDate localDate) {
return Date.from(localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
}
public static Date asDate(LocalDateTime localDateTime) {
return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
}
public static LocalDate asLocalDate(Date date) {
return Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDate();
}
public static LocalDateTime asLocalDateTime(Date date) {
return Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDateTime();
}
}
@Oliv 의견을 기반으로 편집되었습니다.
ZoneId.systemDefault()
시간대가 연중 변경되므로 문제 가되지 않습니다 . 따라서 1 월 1 일에 시간대 -05 : 00 (중앙)에 있고, 1 월 7 월에 시간대에 -06 : 00 (중앙 일광)에 있으면 일광 절약으로 인해 부정확 한 결과가 발생하지 않습니다 시각?
java.sql.Date.valueOf()
방법을 다음과 같이 사용할 수 있습니다 .
Date date = java.sql.Date.valueOf(localDate);
여기에는 표준 시간대 정보가 암시 적으로 사용되므로 여기에 표준 시간대 정보를 추가 할 필요가 없습니다. LocalDate에서 java.util.Date로 또는 그 반대로 변환을
참조하십시오 .
java.sql.Date
데이터베이스 계층, JDBC, JPA를 의미합니다. 웹 계층 (또는 모든 클라이언트 응용 프로그램)에는의 종속성이 없어야합니다 java.sql.*
.
java.sql.Date
그냥 java.util.Date
그것의 시간 설정으로 00:00:00
만 디자인 관점에서의 포인트는 즉 java.sql.*
서블릿 / JSP와 같은 상호 작용 전면 층에있는 고객을 의미하지 않는다. java.util.Date
Java 측 java.sql.Timestamp
또는 java.sql.*
JDBC 측에서 적용 가능한 모든 것 .
java.sql.*
클래스 에서는 별도의 종속성이 있습니다.
java.time에는 대부분의 시간 클래스에서 Instant 객체를 만드는 데 사용할 수있는 Temporal 인터페이스가 있습니다. Instant는 Epoch의 타임 라인에서 밀리 초를 나타냅니다. 다른 모든 날짜와 시간의 기본 참조입니다.
변환을 수행하려면 날짜와 시간을 사용하여 ZonedDateTime으로 변환해야합니다.
LocalDate ldate = ...;
Instant instant = Instant.from(ldate.atStartOfDay(ZoneId.of("GMT")));
Date date = Date.from(instant);
java.time.LocalDate 에서 java.util.Date 를 작성 하려면 다음을 수행해야합니다.
코드는 다음과 같습니다.
LocalDate localDate = LocalDate.now();
Date date = new Date(localDate.atStartOfDay(ZoneId.of("America/New_York")).toEpochSecond() * 1000);
toEpochSecond
는에서 상속되었습니다 java.time.chrono.ChronoZonedDateTime
. docs.oracle.com/javase/8/docs/api/java/time/chrono/…
이것은 나를 위해 작동합니다 :
java.util.Date d = new SimpleDateFormat("yyyy-MM-dd").parse(localDate.toString());
https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html#toString--
코 틀린 솔루션 :
1)이 확장 기능을 어딘가에 붙여 넣습니다.
fun LocalDate.toDate(): Date = Date.from(this.atStartOfDay(ZoneId.systemDefault()).toInstant())
2) 사용하고 다시는 Google을 사용하지 마십시오.
val myDate = myLocalDate.toDate()
public static Date convertToTimeZone(Date date, String tzFrom, String tzTo) {
return Date.from(LocalDateTime.ofInstant(date.toInstant(), ZoneId.of(tzTo)).atZone(ZoneId.of(tzFrom)).toInstant());
}
단순한
public Date convertFrom(LocalDate date) {
return java.sql.Timestamp.valueOf(date.atStartOfDay());
}