2012-04-13 13 views
2

私はデータベースにいくつかの日付を保存するためにpostgresqlを使用しています。
私のアプリケーションでは、タイムゾーンを完全に認識しており、クライアント、サーバー、データベースの間で基本的なテストを行っていたことが基本です。PostgreSQL 9.1タイムゾーン

私はGWTで行ったブラウザのアプリケーションからの日数を送るとPostgreSQLの日付を読みました。

私のテスト:

クライアントは、GMTタイムゾーンに常にある、と私は常に、それぞれの場合に同じ日付を送っています。私は、各テストのためのタイムゾーンを変更していposgresで
13/04/2012 00:00:00 GMT + 00

。テストの間に、テーブルからすべての日付を削除します。

posgresのタイムゾーンを変更するには、{PostgreSQL HOME} \ 9.1 \ data \ postgresql.confでタイムゾーンを設定します。

実験: クライアント:13/04/2012 00:00:00 GMT + 00

1試験 - posgres EST - 2012年12月4日19:00:00〜05 postgresql documentation ESTによれ= GMT - 5
2試験 - posgres GMT + 5 - 2012年12月4日19:00:00〜05
3試験 - posgres GMT - 5 - 13/04/2012 05:00:00 + 05

今私の質問が上がる:ドキュメントによると、EST = GMT - 5だから、なぜ私はそれを逆に読むのだろうか? ここに何か不足していますか?私のテストの

EDIT 技術的側面:2012年4月13日00:00:00 GMT + 00:クライアントで
は、私はこれを送信します。私はDBに書き込むためにJDBCを使用しているサーバー上

コンバートjava.utils.date たjava.sql.Timestampに

java.sql.Timestamp sqlTimeStamp = new java.sql.Timestamp(date.getTime());
(日付はクライアントから来java.utils.Dateです)

は、準備された文
PreparedStatement ps = con.prepareStatement("INSERT INTO teste.dates (dates_tz, dates_ntz) VALUES (?, ?);"

ps.setTimestamp(1、sqlTimeStamp)を設定します。 ...レコードの

を全体的に、それは私の目的に適していますので、これは、私が理解したいだけで何か..です

+1

あなたのテストで使用された実際の声明を示してください。 –

+0

クライアントで私はこれを送る:2012年4月13日00:00:00。 JDBCを使用してデータベースに書き込むサーバーでは、次のようになります。db: java.sql.Timestamp sqlTimeStamp =新しいjava.sql.Timestamp(date.getTime()); (日付はクライアントからのjava.utils.Dateです) INSERT INTO dbFoo.dates_table(date_tz)VALUES(?); ps.setTimestamp(1、sqlTimeStamp); –

+0

コメントを入力する代わりに、質問を編集してください。それははるかに読みやすいです。 –

答えて

11

warning in the documentationことを考えてみましょう:

もう一つの問題は、心に留めておくためにPOSIXタイムゾーン名で、 正のオフセットはグリニッジの場所で使用されているということです。どこでも 他の場合、PostgreSQLはISO-8601の規則に従って、正の値は です。タイムゾーンのオフセットはグリニッジの東です。

あなたが見ているGMTの反対の兆候は、その発散の影響とまったく同じように見えます。 postgresql.confで指定されたタイムゾーンは、おそらくPOSIXルールで解釈されますが、後でISO-8601ルール(誰かが実際に使用するルール)でSQLによって表示されます。

+0

+1 - いいキャッチです。 –

+0

ありがとうございました!それは私の疑問に答えました。 :) –

+1

これは私が最後の2時間以来私が混乱していたものです。これには良い解決策はありませんか?説明ありがとう! – virtualmic

1

壁の時計は時間帯の2012-04-13 00:00を示して「5」ロンドン(GMTまたはUTC)の時刻は2012-04-12 19:00です。

あなたが米国に住んでいる場合、ローカルタイムゾーンであってもよい-5 '。それが深夜になると、ロンドンの朝には05:00になります。

これはまさにそれです。 handling of time zones in PostgreSQLについてのこの詳細な解答は、理解を深めるのに役立ちます。

+0

私はそれを知っています。 事は:GMT-5は文書に従ってESTとまったく同じです。そしてposgresには反対のものが表示されます.ESTはGMT + 5に等しくなります。 –

関連する問題