2012-05-09 5 views
0

マイJavaでのMySQLのdatetimeを与える:私はJDBCはUTC

insertTimestampPreparedStatement.setTimestamp(3, dbTimestamp, Calendar.instance(TimeZone.getTimeZone("UTC")); 

を行う場合でも、私は、MySQLはそれらを保存するかどうかわからないんだけど、

Date parsedDate = dateFormat.parse(timestamp); 
Timestamp dbTimestamp = new Timestamp(parsedDate.getTime());  
insertTimestampPreparedStatement.setTimestamp(3, dbTimestamp); 

phpMyAdminに/ MySQLはいつも私のローカル時間でこれを表示します私がこれをチェックする唯一の方法は、phpmyadminでタイムゾーン行をNOW()に直接更新し、GMTで時間を示していたことです。したがって、phpmyadmin/mysqlにバグがあるか、私のコードが正しいタイムゾーンでタイムスタンプを送信していないかのいずれかです。

これをUTCで動作させるにはどうすればよいですか?

答えて

2

JDBCドライバーは、タイムゾーンを取得または保存するときにローカルタイムゾーンを使用する必要があります(特定のタイムゾーンのカレンダーがない場合)。

残念ながら、JDBCの仕様は、ドライバの動作方法に関して常に明確ではなく、MySQLが間違っているように見えます。 MySQLの場合、接続文字列serverTimeZoneと関連するプロパティに1つ以上のオプションを指定することで、使用するタイムゾーンを強制することができます。完全なリストについては、http://dev.mysql.com/doc/connector-j/en/connector-j-reference-configuration-properties.htmlを参照してください。

+0

*タイムスタンプが保存されている場合を除いて、 "*はローカルタイムゾーン*を使用する必要があります** **タイムゾーンと仮定しますか? (MySQLには関係ありません) –

+0

@a_horse_with_no_nameデータベースにタイムゾーン情報がある場合、ドライバは取得時にそれを使用し、格納時にはデフォルトでローカルタイムゾーンにする必要があります。 –