Estoy usando Java JDBC para escribir una fecha en el servidor sql 2008 y luego volver a leerla.
La fecha leída es consistentemente dos días antes que la fecha tal como está escrita.fechas consistentemente dos días de descanso
Estoy insertando la fila que contiene el campo Fecha con una declaración preparada. El valor de fecha es proporcionada por:
java.sql.Date todaysDate = new java.sql.Date(System.currentTimeMillis()) ;
System.out.println(todaysDate.toString()) -> 2012-07-02
ps.setDate(8, todaysDate);
Después de escribir la fecha en la db, sql server me muestra la fecha correcta si funciono:
select date from table_name where date!=null ->2012-07-02
Si me quedo la misma consulta a través de JDBC a continuación, recuperar el valor de fecha del conjunto de resultados utilizando
java.sql.Date sqlDate = rs.getDate("date") ;
sqlDate.toString() ->2012-06-30
la fila insertada es la única fila de la tabla con una fecha que no sea nulo por lo que este no parece ser un caso de leer el registro incorrecto.
Pensé que este sería un problema bien conocido, pero la única referencia que pude encontrar en una búsqueda de Google para un problema de "dos días de descanso" no tuvo una respuesta definitiva.
¿Alguna idea?
beeky (vivir en el pasado)
Si usa preparedStatement, no convierta desde o hacia String. Pase un objeto de fecha (o marca de tiempo) a setDate. –
¿Cuáles son las zonas horarias tanto del servidor como del cliente? –
¿Estás seguro de que esto no tiene nada que ver con MM-DD-YYYY frente a DD-MM-YYYY? Si sus fechas van desde y hacia cadenas, pueden ser reinterpretadas por configuraciones locales de formas interesantes e inesperadas (en el tiempo de ejecución del cliente y en las bibliotecas de bases de datos y en el código de la base de datos). –