2017-07-10 12 views
0

私はPostgreSQL 8.4を使用しています。サーバはlinuxで、linuxのタイムゾーンはis'EDTではなく、 'UTC'です。 PostgreSQLの設定は、データベースのタイムゾーンを 'UTC'にします。コードはJBoss9で実行されています。jdbcを使用したpostgresqlのクエリ時間の列

私は、 "07/10/2017 02:07"、我々はPostgreSQLのでSQLを実行した場合、我々は値を取得します、select to_char(ts_entry.submitted_date, 'MM/DD/YYYY HH24:MM') as submitted_date_format from ts_entry where ....

を1つのSQLを持って

しかし、私はJavaでresultSetから値を取得しようとすると、

値は "07/09/2017 22:07"になります。 DBの原点の値は "2017-07-10 02:02:25.268+00"です。

Linuxサーバのタイムゾーンがコードレベルで発生する影響をどのように処理できますか?

私は代替ソリューションを知っています。jbossの起動スクリプトを変更して、jbossをタイムゾーン 'UTC'を使って起動させるようにしてください。この問題はコードレベルで処理できますか?

+1

Javaの 'LocalDateTime'がResultSetに – XtremeBaumer

+0

マジックしかし、値の種類を行うことができるはずが「文字列」 – Abner

+0

あり、それがないため申し訳ありませんが結果セット – XtremeBaumer

答えて

0

timezonepostgresql.confに初期化する以外は、データベースサーバーマシンのタイムゾーンは動作に直接影響しません。これは、データベースセッションによって上書きされない限り、クライアントタイムゾーンの初期設定です。

PostgreSQLは内部でUTCでtimestamp with time zoneを保存し、配信時にクライアントのローカルタイムゾーンに変換します。

ですから、データベースセッションのタイムゾーンにあなたは、PostgreSQLから、次に選択すると、その時間帯に日付を変換しますあなたは

SET TIME ZONE '<time zone name>'; 

に必要な方法を設定する必要があります。データベースの列は、日付/日時であれば

+0

はい、あなたが言ったことは理にかなっています。しかし、2つのクライアントが同じサーバーを使用し、両方が同じデータを取得する場合。だから私は同じデータを別のタイムゾーンに変換する必要があり、私は別のクライアントのタイムゾーンを得ることができますが、Linuxサーバのタイムゾーンはこれらすべてを破棄します。 – Abner

+0

*デフォルト* Javaタイムゾーンはクライアントオペレーティングシステムのタイムゾーンによって設定されますが、コード内の異なるタイムゾーンを明示的に使用することはできません。 –

+0

Linuxサーバに接続されたIntelliJを使ってコードをデバッグしました。文字列の値が間違っています。 "07/09/2017 22:07" BTW、私の開発環境のタイムゾーンは-8時間、Linuxサーバーのタイムゾーンは-4時間、文字列値は-4時間です私の開発環境は価値に影響を与えていないようです。 – Abner

関連する問題