web-dev-qa-db-ja.com

LocalDateをインスタントに変換する方法は?

Java 8の新しいDateTime APIを使用しています。

LocalDateをインスタントに変換する方法は?私は例外を取得します

LocalDate date = LocalDate.of(2012, 2, 2);
Instant instant = Instant.from(date);

理由がわかりません。

83
user1643352

それをインスタントに変換するには、LocalDateTimeインスタンスが必要です、例えば:

LocalDate.now().atStartOfDay().toInstant(ZoneOffset.UTC)
106
mdo

Instantクラスは、タイムライン上の瞬間的なポイントを表します。 LocalDateとの間の変換にはタイムゾーンが必要です。他のいくつかの日時ライブラリとは異なり、JSR-310はタイムゾーンを自動的に選択しないため、指定する必要があります。

LocalDate date = LocalDate.now();
Instant instant = date.atStartOfDay(ZoneId.systemDefault()).toInstant();

この例では、JVMのデフォルトのタイムゾーン-ZoneId.systemDefault()-を使用して変換を実行します。関連する質問の 長い回答 については、こちらをご覧ください。


更新:受け入れられた回答は、ZoneOffsetのみを受け入れるLocalDateTime::toInstant(ZoneOffset)を使用します。この回答では、ZoneIdを受け入れるLocalDate::atStartOfDay(ZoneId)を使用しています。そのため、この答えは一般的にはより有用です(おそらく受け入れられるべきでしょう)。

PS。私はAPIの主要著者でした

65
JodaStephen