Java.util.Date
をJava.time.LocalDate
に変換しようとすると、次の例外が発生します。
Java.time.DateTimeException: Unable to obtain ZonedDateTime from TemporalAccessor: 2014-08-19T05:28:16.768Z of type Java.time.Instant
コードは次のとおりです。
public static Date getNearestQuarterStartDate(Date calculateFromDate){
int[] quaterStartMonths={1,4,7,10};
Date startDate=null;
ZonedDateTime d=ZonedDateTime.from(calculateFromDate.toInstant());
int frmDateMonth=d.getMonth().getValue();
ZonedDateTime
クラスの使用方法に何か問題がありますか?
ドキュメントに従って、これはJava.util.Date
オブジェクトをZonedDateTime
に変換する必要があります。上記の日付形式は標準の日付ですか?
Joda時間にフォールバックする必要がありますか?
誰かが何か提案を提供できれば、それは素晴らしいことです。
Instant
をZonedDateTime
に変換するために、ZonedDateTime
はメソッド ZonedDateTime.ofInstant(Instant, ZoneId)
を提供します。そう
したがって、デフォルトのタイムゾーンでZonedDateTime
が必要だと仮定すると、コードは
ZonedDateTime d = ZonedDateTime.ofInstant(calculateFromDate.toInstant(),
ZoneId.systemDefault());
DateからZonedDateTimeを取得するには、次を使用できます。
calculateFromDate.toInstant().atZone(ZoneId.systemDefault())
LocalDateが必要な場合は、toLocalDate
メソッドを呼び出すことができます。参照: Java.util.DateをJava.time.LocalDateに変換
Java 10 UTCでutil.Dateを保存する場合、答えは私にはうまくいきませんでした。
Date.toInstant()は、EpochMillisをサーバーのローカルタイムゾーンに変換するようです。
ZDT.ofInstant(instant、zoneId)およびinstant.atZone(zoneId)は、瞬時にTZにタグ付けするように見えますが、すでに台無しになっています。
Date.toInstant()がシステムタイムゾーンのUTC時間を混乱させないようにする方法が見つかりませんでした。
これを回避するために見つけた唯一の方法は、sql.Timestampクラスを調べることでした。
new Java.sql.Timestamp(date.getTime()).toLocalDateTime()
.atZone(ZoneId.of("UTC"))
.withZoneSameInstant(desiredTZ)