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.