3

java.sql.Dateメソッドがあることに驚きましたtoLocalDate()

java.util.Dateまたはjava.time.Instant同等の方法がありません。では、 「LocalFoo」または「OffsetBar」を取得するには、常に を指定java.timeする必要があるようです。ZoneId

の javadoc からjava.sql.Date#toLocalDate():

この Date オブジェクトを LocalDate に変換します。変換により、ローカル タイム ゾーンでこの Date と同じ日付値を表す LocalDate が作成されます

「ローカルタイムゾーン」とはどのタイムゾーンですか? データベースまたは JVM の設定に依存しますか?

4

2 に答える 2

5

概念的には、 ajava.sql.Dateは a と同じLocalDateです。時間またはタイムゾーンのない日付。実際にjava.sql.Dateは、ミリ秒に基づいて実装されるためlong、システムのタイムゾーンが暗黙的に使用されます。したがって、この方法が存在するのは、Java SQL 仕様のリーダーがタイムゾーンなしであるtoLocalDate()と考えてほしいからです。java.sql.Date

于 2016-06-09T12:05:50.380 に答える
1

修正ミリ秒値をラップする java.sql.Date-Object を指定すると、システムの Default-Timezone に応じて実際に異なる LocalDate-Values が得られます。

次のコードスニペットを試しました:

TimeZone.setDefault(TimeZone.getTimeZone("America/Los_Angeles"));
java.sql.Date sqlDate = new java.sql.Date(1465485798671l);
System.out.println(sqlDate.toLocalDate());
TimeZone.setDefault(TimeZone.getTimeZone("Asia/Tokyo"));
System.out.println(sqlDate.toLocalDate());

これにより、次の結果が得られます。 2016-06-09 2016-06-10

于 2016-06-09T15:31:46.893 に答える