JavaJDBCを使用してSQLServer2008に日付を書き込み、それを読み戻しています。
読み戻される日付は、実際に書き込まれた日付よりも一貫して2日前です。
プリペアドステートメントを使用して、日付フィールドを含む行を挿入しています。日付の値は次のように提供されます。
java.sql.Date todaysDate = new java.sql.Date(System.currentTimeMillis()) ;
System.out.println(todaysDate.toString()) // -> 2012-07-02
ps.setDate(8, todaysDate);
DBに日付を書き込んだ後、次のコマンドを実行すると、SQLサーバーに正しい日付が表示されます。
select date from table_name where date!=null // ->2012-07-02
JDBCを介して同じクエリを実行する場合は、次を使用して結果セットから日付値を取得します。
java.sql.Date sqlDate = rs.getDate("date") ;
sqlDate.toString() // ->2012-06-30
挿入された行は、テーブル内でnull以外の日付を持つ唯一の行であるため、これは間違ったレコードを読み取った場合ではないように見えます。
これはよく知られている問題だと思いましたが、Googleで「2日間の休暇」の問題を検索して見つけた唯一の参考資料には明確な答えがありませんでした。
何か案は?
beeky(過去に生きている)