jdbcドライバーによってローカルタイムゾーンに変換されずに、タイムスタンプをデータベースに保存したいと思います。現在、MySQLとPostgreSQLだけが私にとって重要ですが、データベースに依存しないソリューションがあれば幸いです。
例:
// i want that to be saved as 1970-01-01 00:00:00
TimeStamp ts = new java.sql.Timestamp(0);
// gets transformed to local time by jdbc driver (in my case to 1970-01-01 01:00:00)
st.setTimestamp(0, new java.sql.Timestamp(0));
// only works using postgres (mysql connector seems to ignore the calendar)
// postgres => 1970-01-01 00:00:00
// mysql => 1970-01-01 01:00:0
Calendar calutc = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
st.setTimestamp(0, new java.sql.Timestamp(0), utccal);
正しい値に変換されるタイムスタンプ値を計算しようとしましたが(たとえば、私のタイムゾーンでは-3600000 => 1970-01-01 00:00:00)、これはその日の近くの日付のpostgresでは機能しません夏時間が変わります。