2011-12-16 22 views
15

Al insertar un SQL DateTime a la base de datos me sale 2007-02-07 12:00:00.00java fecha y hora de SQL

pero he hecho el objeto Date así: 2007-02-07 17:29:46.00

cómo obtener el valor de los segundos en la base de datos. Siempre cambia de nuevo a 12:00:00.00

date.setYear(Integer.valueOf(parsedDate[2].replaceAll(" ", "")) - 1900); 
date.setMonth(Integer.valueOf(parsedDate[0].replaceAll(" ", ""))); 
date.setDate(Integer.valueOf(parsedDate[1].replaceAll(" ", ""))); 
... 
java.sql.Date sqlDate = new java.sql.Date(date.getTime()); 

¿Debo usar cualquier formateadores?

+0

Una "Fecha" (un número que representa algún punto en el tiempo) es INDEPENDIENTE de su formato (el * mismo * número se puede representar como "2007-02-07" o "2007-07-02" o "2/7/2007 ". También es independiente de su zona horaria (el mismo número puede ser" 2/7/2007 "en Los Ángeles, y" 2/8/2007 "en Londres). Finalmente una" fecha "(por ejemplo," 2/7/2007 ") tiene un valor diferente al de una fecha (por ejemplo," 2/7/2007 09:15 a.m. "). Supongo que probablemente esté usando" fecha ", donde quiere usar" fecha y hora ". – paulsm4

+0

PD: java.util.date significa "fecha" o "fecha y hora". Java.sql.date es solo "fecha". Y para bases de datos como MS Sql Server, "fecha" o "fecha y hora" son DIFERENTES de "marca de hora". http://stackoverflow.com/questions/2305973/java-util-date-vs-java-sql-date – paulsm4

+0

PPS: en MS SQL Server (si eso es lo que está utilizando), una "marca de tiempo" es enfáticamente no es una fecha o fecha y hora: http://www.sqlteam.com/article/ timestamps-vs-datetime-data-types. Si desea una fecha (independientemente de la hora del día), haga que su columna SQL sea "fecha". Si desea la hora del día (independientemente de la fecha del calendario), conviértalo en "hora". Bajo NINGUNA CIRCUNSTANCIA use una "marca de tiempo" de SQL Server para mantener columnas de hora/fecha lógicas. – paulsm4

Respuesta

29

java.sql.Date representa una fecha, no una fecha y hora. De the docs:

To conform with the definition of SQL DATE, the millisecond values wrapped by a java.sql.Date instance must be 'normalized' by setting the hours, minutes, seconds, and milliseconds to zero in the particular time zone with which the instance is associated.

Si desea almacenar una fecha y hora, usted debe buscar otro tipo - por ejemplo, java.sql.Timestamp. EDITAR: Eso no sugiere que uses un tipo de columna TIMESTAMP, como dice paulsm4 en los comentarios, eso es algo diferente. Sin embargo, por lo que yo puedo ver, JDBC sólo es compatible con:

  • Date (no, que desea un tiempo demasiado)
  • Time (no, que quieren una fecha demasiado)
  • Timestamp (incluye una fecha y tiempo, pero no desea que la semántica de SQL TIMESTAMP)

me esperar utilizando el tipo Java Timestamp con una columna de fecha y hora a trabajar, aunque sin el nivel de precisión que Timestamp proporciona.

EDIT: Después de investigar un poco más, parece que puede querer usar el tipo java.sql.Time, pero con parámetros especiales del conductor - al menos si está utilizando el controlador de Microsoft. Consulte estos documentos en configuring JDBC para obtener más información.

+0

¿cómo llegar hasta esta fecha? ¿Hay alguna otra opción? – Elbek

+0

@elbek: ver mi edición - básicamente, no use 'Fecha' aquí, use un tipo diferente. –

+0

si hago la columna tipo indicación de fecha y hora no puedo cambiarla manualmente? – Elbek

Cuestiones relacionadas