データベースにいくつかの日付を保存するためにpostgresqlを使用しています。
私のアプリケーションでは、タイムゾーンを完全に認識していることが基本であり、クライアント、サーバー、およびデータベースの間でいくつかの基本的なテストを行っていました。
GWT で行ったブラウザーのアプリケーションから日付を送信し、postgresql で日付を読み取ります。
私のテスト:
クライアントは常に GMT タイムゾーンにあり、それぞれのケースで常に同じ日付を送信しています。
2012 年 4 月 13 日 00:00:00 GMT+00
posgres では、テストごとにタイムゾーンを変更しています。テストの合間に、テーブルからすべての日付を削除しています。
posgres のタイムゾーンを変更するには、{PostgreSQL HOME}\9.1\data\postgresql.conf でタイムゾーンを希望するタイムゾーンに設定します。
テスト: クライアント: 13/04/2012 00:00:00 GMT+00
1 回目のテスト - posgres EST - 12/04/2012 19:00:00-05 postgresql のドキュメントによるとEST = GMT - 5
2 回目のテスト - posgres GMT + 5 - 12/04/2012 19:00:00-05
3 回目のテスト - posgres GMT - 5 - 2012 年 4 月 13 日 05:00:00+05
ここで私の疑問が生じます。ドキュメントによると、EST = GMT - 5 です。では、なぜ逆に読んでいるのですか? ここで何か不足していますか?
私のテストの編集
技術的な側面:
クライアントでこれを送信します: 2012 Apr 13 00:00:00 GMT+00.
サーバー上で、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); ...
記録のために、これは私が理解したいことです.全体的に私の目的にはうまくいくので..