GMT + 1タイムゾーンにあり、long
変数にUTCタイムスタンプ(11:12:56)があります。UTCタイムスタンプ - > java.sql.Timestamp - > jOOQ - > postgreSQLのローカルタイムスタンプ?
long ts = 1487157176450;
私はこのタイムスタンプからjava.sql.Timestamp
を初期化します。
Timestamp timestamp = new Timestamp(ts);
次に、このタイムスタンプをjOOQを使用してPostgreSQL(v9.4)データベースに挿入します。
create.insertInto(TABLE,
TABLE.NAME, TABLE.TS)
.values("Foo bar", timestamp);
しかし、私は実際のSQLコマンドが実行ログインしてきたとき、私はこれを見た:
< 2017-02-15 10:50:37.326 CET >LOG: execute <unnamed>: insert into "database"."table" ("name", "ts") values ($1, cast($2 as timestamp))
< 2017-02-15 10:50:37.326 CET >DETAIL: parameters: $1 = 'Foo bar', $2 = '2017-02-15 12:12:56.450'
私はタイムスタンプがローカルのものになってますたところ全くわからないんだけど、しない限り、 pgAdminは、私が実際に意図したUTCではなく、データベースにGMT + 1のタイムスタンプを格納しています。
JDBCを使用していないため、リンクされた質問に対する回答は役に立ちません。 jOOQに正しいタイムスタンプを保存させるにはどうすればいいですか?
あなたのクライアントのタイムゾーンをUTCに設定するか、明示的なキャスト 'cast($ 2 as timestamptz) 'を使用することができます。 –
JDBC仕様では、1)明示的に指定されていない限り、JVMのデフォルトタイムゾーンでタイムスタンプを送信する必要があります。正しいタイムゾーンで 'Calendar'を渡し、2)特定のタイムゾーンの列に挿入する、3)' java.time.OffsetDateTime'を使用する –