2011-07-06 6 views
2

このプロジェクトでは、MySQLデータベースを使用しています。しかし今、PostgreSQLに移行したいと思います。 timestamp型の列を持つ1つのテーブルを除いて、すべてが正常に動作します。PostgreSQL PreparedStatement.setTimestamp question

//MedName is varchar, and DateTime is timestamp 
String INSERT_REFILL = "INSERT INTO refill (MedName, DateTime) VALUES (?, ?)"; 
PreparedStatement ps = conn.prepareStatement(INSERT_REFILL); 
ps.setString(1, "Tylenol"); 
java.sql.Timestamp sqlDate = new java.sql.Timestamp(new java.util.Date().getTime()); 
TimeZone tz = TimeZone.getTimeZone("GMT"); 
GregorianCalendar cal = (GregorianCalendar) GregorianCalendar.getInstance(tz); 
ps.setTimestamp(2, sqlDate, cal); 

私の質問:いくつかの理由で、setTimestampはいつものPreparedStatementの値に5時間を追加します。私はセントラルにいるので、私の時間は夏時間のためにxx:xx:xx-0500(Central)になります。しかし、私は本当に+5時間がそれに由来すると疑っています。何か案は?

注:私はPostgreSQLデータベースをセットアップした人ではありませんが、私はそのテーブルを作成しました。

答えて

2

米国の中央時間はUTCの5時間前です。 (夏時間のUTCの6時間前です)。

タイムゾーン変換に問題があります。それはあなたの現地時間であるかのように、UTCでタイムスタンプを扱っているようです。

入力値が入っているタイムゾーンを特定し、それに応じてPostgresに入力する必要があります。

また、Postgresが適切に変換を行っている可能性があります。データを正しく読み込んでいない可能性があります。 UTCからUTCに変換する必要がある場合は、表示するデータを抽出するときにUTCからローカル時間に変換するだけで、ローカルからUTCへの変換を正確に行うことができます。