sql >> Base de Datos >  >> RDS >> Mysql

Manejo de fecha y hora de MySQL y marcas de tiempo en Java

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 el Epoch time en sabor de un long , también conocida como marca de tiempo. Contiene información sobre las partes de fecha y hora. En Java, la precisión es en milisegundos.

En el lado de SQL, hay varios tipos de fecha y hora estándar, DATE , TIME y TIMESTAMP (en algunas bases de datos también se llama DATETIME ), que se representan en JDBC como java.sql.Date , java.sql.Time y 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.

Al contrario de java.util.Date , el java.sql.Date contiene solo información sobre la parte de la fecha (año, mes, día). El Time contiene solo información sobre la parte del tiempo (horas, minutos, segundos) y el Timestamp contiene información sobre ambas partes, como java.util.Date lo hace.

La práctica normal para almacenar una marca de tiempo en la base de datos (por lo tanto, java.util.Date en el lado de Java y java.sql.Timestamp en el lado de JDBC) es usar 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 usar ResultSet#getTimestamp() .

Timestamp timestamp = resultSet.getTimestamp("ts");
java.util.Date date = timestamp; // You can just upcast.