ホームページ > Java > &#&チュートリアル > java.sql.Timestamp のタイムゾーンの動作はデータベースとドライバー間で一貫していますか?

java.sql.Timestamp のタイムゾーンの動作はデータベースとドライバー間で一貫していますか?

Susan Sarandon
リリース: 2024-12-12 19:17:10
オリジナル
178 人が閲覧しました

Is java.sql.Timestamp's Time Zone Behavior Consistent Across Databases and Drivers?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート