タイプに変換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(中央)であるのに、7月1日のタイムゾーンが-06:00(中央の夏時間)である場合、夏時間のために結果が不正確になることはありません。時間?
java.sql.Date.valueOf()
メソッドは次のように使用できます。
Date date = java.sql.Date.valueOf(localDate);
時間とタイムゾーン情報は暗黙的に取得されるため、ここに追加する必要はありません。LocalDateからjava.util.Dateへ、およびその逆の最も単純な変換を
参照してください。
java.sql.Date
データベース層、JDBC、JPA用です。Webレイヤー(または任意のクライアントアプリケーション)には、絶対にからの依存関係がないはず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は、エポックのタイムライン上のミリ秒を表します。これは、他のすべての日付と時刻の基本参照です。
変換を行うには、DateをTimedとZoneを持つ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--
Kotlinソリューション:
1)この拡張機能をどこかに貼り付けます。
fun LocalDate.toDate(): Date = Date.from(this.atStartOfDay(ZoneId.systemDefault()).toInstant())
2)それを使用し、これを再度グーグルすることはありません。
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());
}