java.sql.Timestamp はタイムゾーンの影響を受けますか?
概要:
の場合日付と時刻の値をデータベースに保存する場合、これらの値が時刻の影響を受けるかどうかを考慮することが重要です。ゾーン。 Java は、タイムスタンプを処理するための java.sql.Timestamp クラスを提供します。この記事では、タイムスタンプがタイムゾーンの影響を受けるかどうかについて説明します。
タイムスタンプの変換と保存について:
UTC タイムスタンプをデータベースに保存するには、特定のタイムゾーンのタイムスタンプを UTC に変換する必要があります。この例では、Date クラスと TimeZone クラスを使用して、「アジア/カルカッタ」タイム ゾーンのタイムスタンプを UTC に変換しました。
タイムスタンプ ストレージ動作:
Oracle データベースに保存する前にタイムスタンプを UTC に変更すると、データベースは元の「アジア/カルカッタ」タイム ゾーンで保存しましたUTC の代わりに。これは、Calendar オブジェクトが指定されていない限り、JDBC ドライバーは通常、タイムスタンプを設定するときにサーバーの仮想マシンのタイム ゾーンを使用するためです。
タイム ゾーンの影響:
デフォルトアプリケーションを実行している仮想マシンのタイムゾーンは、タイムスタンプ値がデータベースに保存される方法に影響します。異なるタイムゾーンの Calendar オブジェクトを明示的に指定しない場合、タイムスタンプはサーバーのタイムゾーンに保存されます。
代替アプローチ:
タイムスタンプ値を保存するには特定のタイムゾーンでは、setTimestamp(intparameterIndex, Timestamp x, Calendar cal) メソッドを使用することをお勧めします。このメソッドを使用すると、カスタム Calendar オブジェクトを指定して、タイムスタンプが目的のタイム ゾーンに確実に保存されるようにすることができます。あなたの場合、次のように使用します。
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT")); stmt.setTimestamp(11, tsSchedStartTime, cal);
このアプローチにより、タイムスタンプが GMT タイム ゾーンで保存されるようになります。
timeStamp.toString() 動作:
timeStamp.toString() がタイムスタンプを現地時間で出力するか UTC で出力するかは、 JDBC ドライバーの実装。一部のドライバーは、タイムスタンプの設定時に使用される Calendar オブジェクトのタイム ゾーンを尊重する場合がありますが、他のドライバーは常に仮想マシンのタイム ゾーンを使用する場合があります。タイムスタンプ値を取得するには、タイム ゾーンの影響を受けない java.time.LocalDateTime オブジェクトを返す getObject(.., LocalDateTime.class) メソッドを常に使用することをお勧めします。
以上がjava.sql.Timestamp のタイムゾーンの動作はデータベースとドライバー間で一貫していますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。