41

のjavadocはLocalDate#toDateMidnight次のようになります。

v1.5 以降では、DateMidnight を避け、代わりに toDateTimeAtStartOfDay() を使用することをお勧めします。これは、以下に詳述する例外のためです。

デフォルトのタイムゾーンが真夜中に夏時間に切り替わり、この LocalDate がその切り替え日を表す場合、このメソッドは例外をスローします。問題は、必要な日付の真夜中などの時間がないため、例外がスローされることです。

真夜中が特定のタイム ゾーンに存在しないという事実は、使用をDateMidnight完全に避ける十分な理由のように思えます (コードが、この DST 状況を持たないことが知られており、別のタイム ゾーンを使用する必要がないことがわかっている固定のタイム ゾーンを使用していないと仮定します)。将来)。

ただし、DateMidnight非推奨ではなく、DateMidnightクラス自体の javadoc に同様の推奨事項や警告はありません。さらに、コンストラクターは、 likeDateMidnightをスローするのではなく、指定された日の真夜中が存在しないようなインスタントとタイムゾーンを喜んで受け入れます。結果は、1 日の開始時に withのように動作します。IllegalArgumentExceptionLocalDate#toDateMidnightDateMidnightDateTime

特定の日の真夜中が存在しない場合、コンストラクターがLocalDate#toDateMidnight例外をスローしないのに例外をスローするのはなぜですか? DateMidnight推奨されるユースケースはDateMidnight何ですか?

4

6 に答える 6

37

新しい DateTime()。withTimeAtStartOfDay()が推奨されます。

于 2014-03-23T02:38:11.253 に答える
8

または、LocalDateメソッドtoDateTimeAtStartOfDayを直接使用して、DateTimeオブジェクトの作成をバイパスすることをお勧めします(上記の回答に関連して)。

new LocalDate().toDateTimeAtStartOfDay( myDateTimeZone )
于 2014-06-12T01:52:41.290 に答える
4
于 2016-10-02T02:41:01.670 に答える