データベースにタイムスタンプを格納および取得するために java.sql.Timestamp を利用する場合、次の点を考慮することが重要です。データに対するタイム ゾーンの影響。
デフォルトでは、Calendar オブジェクトを指定せずに setTimestamp(int, Timestamp) を使用して Timestamp オブジェクトが設定されている場合、JDBC ドライバーはアプリケーションを実行している仮想マシンのタイム ゾーンを利用します。これは、データベースに保存されたタイムスタンプが意図したタイム ゾーンを反映していない可能性があることを意味します。
UTC タイムスタンプがデータベースに正しく保存されるようにするには、Calendar オブジェクトを提供する必要があります。 setTimestamp(int, Timestamp, Calendar) に希望のタイムゾーンを設定します。 UTC の場合、これは次のように実現できます。
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC")); stmt.setTimestamp(11, tsSchedStartTime, cal);
タイム ゾーンの考慮事項を無視すると、提供されたコードは UTC タイムスタンプをローカル タイムスタンプとして誤って保存します。現在のアプリケーションのタイムゾーンに基づいて解釈されるため、データベースからデータを取得するときに不一致が発生する可能性があります。
Timestamp.toString() メソッドは、java.util.Date と同様に、仮想マシンのローカル タイムゾーンに基づいてタイムスタンプを出力します。保存された値のタイム ゾーンは反映されません。
JDBC 4.2 では、TIMESTAMP および TIME データ型の java.time.LocalDateTime および java.time.LocalTime のサポートが導入されました。 。これらのクラスはタイムゾーンに依存しないため、明示的なタイムゾーン変換の必要がなくなります。
以上がJDBC で java.sql.Timestamp を使用するときにタイムゾーンを適切に処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。