Я использую 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 для проблемы "двух выходных", не имела однозначного ответа.
Есть идеи?
Бики (живущий в прошлом)