Sto utilizzando Java JDBC per scrivere una data su SQL Server 2008 e quindi leggerlo di nuovo.
La data come letto è sempre due giorni prima della data scritta.date in modo coerente due giorni di riposo
Sto inserendo la riga contenente il campo Data con una dichiarazione preparata. Il valore della data è fornita da:
java.sql.Date todaysDate = new java.sql.Date(System.currentTimeMillis()) ;
System.out.println(todaysDate.toString()) -> 2012-07-02
ps.setDate(8, todaysDate);
Dopo aver scritto la data al db, sql server mi mostra la data corretta se corro:
select date from table_name where date!=null ->2012-07-02
Se eseguo la stessa query tramite JDBC quindi recuperare il valore data dal gruppo di risultati utilizzando
java.sql.Date sqlDate = rs.getDate("date") ;
sqlDate.toString() ->2012-06-30
la riga inserita è l'unica riga nella tabella con data non nullo quindi questo non sembra essere un caso di lettura del record errato.
Ho pensato che si trattasse di un problema ben noto, ma l'unico riferimento che ho trovato da una ricerca su Google per un problema di "due giorni di riposo" non ha avuto una risposta definitiva.
Qualche idea?
beeky (vivere nel passato)
Se si utilizza preparedStatement, non eseguire la conversione da o su String. Passa un oggetto data (o Timestamp) a setDate. –
Quali sono i fusi orari del server e del client? –
Sei sicuro che questo non ha nulla a che fare con MM-DD-YYYY vs DD-MM-YYYY? Se le tue date vanno da e verso le stringhe, possono essere reinterpretate dalle impostazioni locali in modi interessanti e inaspettati (nel runtime del client e nelle librerie del database e nel codice del database). –