valueof example ejemplo java sql-server date

example - java.sql.date format



Fechas consistentemente dos días libres (9)

Controlador JDBC defectuoso

Resulta que el problema era el controlador de MS jdbc. Probé todas las combinaciones posibles de tipos de fecha y conversiones de fecha y nada funcionó. Después de una gran cantidad de búsquedas (¡debería haber hecho eso primero!) Vi un comentario en una entrada SO más antigua que implicaba que el problema era el controlador jdbc de la versión 3 de Microsoft. Obtuve el último controlador, la versión 4. algo, y el problema desapareció.

Gracias a todos los que intentaron ayudar. Gracias especiales a ti, Mike, por tomarse el tiempo para publicar una solución. - = beeky

Estoy utilizando Java JDBC para escribir una fecha en el servidor SQL 2008 y luego leerlo.
La fecha leída es consistentemente dos días antes de la fecha escrita.

Estoy insertando la fila que contiene el campo Fecha con una declaración preparada. El valor de la fecha es proporcionado 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 base de datos, el servidor SQL me muestra la fecha correcta si ejecuto:

select date from table_name where date!=null ->2012-07-02

Si ejecuto la misma consulta a través de JDBC, recupero el valor de fecha del conjunto de resultados usando

java.sql.Date sqlDate = rs.getDate("date") ; sqlDate.toString() ->2012-06-30

La fila insertada es la única fila en la tabla con una fecha no nula, por lo que no parece ser un caso de lectura del 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 tenía una respuesta definitiva.

¿Algunas ideas?

beeky (viviendo en el pasado)


Este problema viene cuando estamos usando Date DataType en Microsoft SQL. He arreglado esto para cambiar la fecha a datetime.


Me he encontrado con este problema un par de veces recientemente y me arranqué el pelo antes de recordar que si el campo es de tipo fecha, esto sucede, cambiar el tipo de campo a tipo datetime resuelve el problema.


Para aquellos que usan maven, use esto para java 8:

<dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId>mssql-jdbc</artifactId> <version>6.2.1.jre8</version> </dependency>

Como se señala, si usa una versión anterior, puede enfrentar este problema y no es fácil de depurar.


Si está utilizando MSSQL 2015, use este Sqljdbc41 para solucionar este problema

<!-- https://mvnrepository.com/artifact/com.microsoft.sqlserver/sqljdbc41 --> <dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId>sqljdbc41</artifactId> <version>6.0.8112</version> </dependency>


Su problema son los valores de la zona horaria ("GMT").
Debe introducir esta manipulación en su método de recuperación JDBC siguiente manera:

Calendar gmt = Calendar.getInstance(TimeZone.getTimeZone("GMT")); PreparedStatement stmt = connection.prepareStatement(sql); stmt.setDate(1, new Date(0)); // I assume this is always GMT ResultSet rs = stmt.executeQuery(); rs.next(); //This will output 0 as expected System.out.println(rs.getDate(1, gmt).getTime());


Tuve el mismo problema exacto incluso usando sqljdbc4 con Java 8.

Una vez que no necesito este campo para hacer ningún tipo de comparación en la aplicación, resolví el problema al colocar el campo en mi consulta de esta manera: CAST(dbo.tblPwActividadeParticipanteDetalhe.Data AS VARCHAR(10)) .


Tuve exactamente el mismo problema. La compensación de 2 días desapareció tan pronto como usé el entorno de ejecución Java 6 en lugar de un entorno de ejecución Java 6.

Por lo tanto, posiblemente también sea una diferencia entre la compatibilidad de JDBC versión 4.1 con controladores JDBC 3.


como dijo el usuario903724, el cambio a la versión 4 se arreglaría, pero en mi caso, cuando estoy usando sqljdbc4-3.0.jar, este problema aún se reproduce, pero lo cambio a sqljdbc42.jar, este problema se solucionó. Espero que mi experiencia sea de ayuda. descargar desde sqljdbc42.jar