ホームページ >Java >&#&チュートリアル >JDBC で java.sql.Timestamp を使用するときにタイムゾーンを適切に処理するにはどうすればよいですか?

JDBC で java.sql.Timestamp を使用するときにタイムゾーンを適切に処理するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-15 20:48:17953ブラウズ

How Can I Properly Handle Time Zones When Using java.sql.Timestamp with JDBC?

java.sql.Timestamp のタイムゾーンに関する考慮事項を理解する

データベースにタイムスタンプを格納および取得するために java.sql.Timestamp を利用する場合、次の点を考慮することが重要です。データに対するタイム ゾーンの影響。

でのタイム ゾーンの処理JDBC

デフォルトでは、Calendar オブジェクトを指定せずに setTimestamp(int, Timestamp) を使用して Timestamp オブジェクトが設定されている場合、JDBC ドライバーはアプリケーションを実行している仮想マシンのタイム ゾーンを利用します。これは、データベースに保存されたタイムスタンプが意図したタイム ゾーンを反映していない可能性があることを意味します。

UTC タイムスタンプの保存

UTC タイムスタンプがデータベースに正しく保存されるようにするには、Calendar オブジェクトを提供する必要があります。 setTimestamp(int, Timestamp, Calendar) に希望のタイムゾーンを設定します。 UTC の場合、これは次のように実現できます。

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
stmt.setTimestamp(11, tsSchedStartTime, cal);

出力への影響

タイム ゾーンの考慮事項を無視すると、提供されたコードは UTC タイムスタンプをローカル タイムスタンプとして誤って保存します。現在のアプリケーションのタイムゾーンに基づいて解釈されるため、データベースからデータを取得するときに不一致が発生する可能性があります。

Timestamp.toString() に対するローカル タイムゾーンの影響

Timestamp.toString() メソッドは、java.util.Date と同様に、仮想マシンのローカル タイムゾーンに基づいてタイムスタンプを出力します。保存された値のタイム ゾーンは反映されません。

JDBC 4.2 の解決策

JDBC 4.2 では、TIMESTAMP および TIME データ型の java.time.LocalDateTime および java.time.LocalTime のサポートが導入されました。 。これらのクラスはタイムゾーンに依存しないため、明示的なタイムゾーン変換の必要がなくなります。

以上がJDBC で java.sql.Timestamp を使用するときにタイムゾーンを適切に処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。