Я использую Java JDBC, чтобы записать дату на SQL Server 2008, а затем прочитать ее обратно.
Дата, которая считывается обратно, постоянно на два дня раньше, чем дата, которая была фактически записана.
Я вставляю строку, содержащую поле «Дата», с подготовленным оператором. Значение даты предоставляется:
java.sql.Date todaysDate = new java.sql.Date(System.currentTimeMillis()) ;
System.out.println(todaysDate.toString()) // -> 2012-07-02
ps.setDate(8, todaysDate);
После записи даты в БД 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
Вставленная строка является единственной строкой в таблице с нулевой датой, отличной от -, так что это не похоже на чтение неправильной записи.
Я думал, что это будет хорошо известная проблема, но единственная ссылка, которую я смог найти в поиске Google по проблеме «два выходных», не дала однозначного ответа.
Любые идеи?
бики (живущий в прошлом)