Manejo de fechas y marcas de tiempo de MySQL en Java

Resuelto James P. asked hace 14 años • 3 respuestas

En una aplicación Java, ¿cuál sería un buen compromiso en términos de extraer e ingresar información de fecha con una base de datos MySQL usando una combinación de fechas, horas y marcas de tiempo?

James P. avatar Jul 24 '10 09:07 James P.
Aceptado

En el lado de Java, la fecha generalmente está representada por (mal diseñado, pero aparte de eso) java.util.Date. Básicamente está respaldado por la época de época en forma de long, también conocida como marca de tiempo. Contiene información sobre las partes de fecha y hora. En Java, la precisión es de milisegundos.

En el lado de SQL, hay varios tipos de fecha y hora estándar, DATEy TIME( TIMESTAMPen algunas bases de datos también llamados DATETIME), que se representan en JDBC como java.sql.Date, java.sql.Timey java.sql.Timestamp, todas las subclases de java.util.Date. La precisión depende de la base de datos, a menudo en milisegundos como Java, pero también puede ser en segundos.

A diferencia de java.util.Date, java.sql.Datecontiene sólo información sobre la parte de la fecha (año, mes, día). Contiene Timesolo información sobre la parte del tiempo (horas, minutos, segundos) y contiene Timestampinformación sobre ambas partes, como lo java.util.Datehace.

La práctica normal para almacenar una marca de tiempo en la base de datos (por lo tanto, java.util.Dateen el lado de Java y java.sql.Timestampen el lado de JDBC) es utilizar PreparedStatement#setTimestamp().

java.util.Date date = getItSomehow();
Timestamp timestamp = new Timestamp(date.getTime());
preparedStatement = connection.prepareStatement("SELECT * FROM tbl WHERE ts > ?");
preparedStatement.setTimestamp(1, timestamp);

La práctica normal para obtener una marca de tiempo de la base de datos es utilizar ResultSet#getTimestamp().

Timestamp timestamp = resultSet.getTimestamp("ts");
java.util.Date date = timestamp; // You can just upcast.
BalusC avatar Jul 24 '2010 04:07 BalusC

La documentación de MySQL tiene información sobre cómo asignar tipos de MySQL a tipos de Java. En general, para MySQL datetime y timestamps deberías usar java.sql.Timestamp. Algunos recursos incluyen:

http://dev.mysql.com/doc/refman/5.1/en/datetime.html

http://www.coderanch.com/t/304851/JDBC/java/Java-date-MySQL-date-conversion

¿Cómo almacenar la fecha de Java en la fecha y hora de Mysql...?

http://www.velocityreviews.com/forums/t599436-the-best-practice-to-deal-with-datetime-in-mysql-using-jdbc.html

EDITAR:

Como han indicado otros, la sugerencia de utilizar cadenas puede generar problemas.

Garett avatar Jul 24 '2010 04:07 Garett