Ở phía Java, ngày thường được biểu thị bằng (được thiết kế kém, nhưng sang một bên) java.util.Date
. Về cơ bản, nó được hỗ trợ bởi Epoch time
trong hương vị của một long
, còn được gọi là dấu thời gian. Nó chứa thông tin về cả ngày và giờ. Trong Java, độ chính xác tính bằng mili giây.
Trong phía SQL, có một số kiểu ngày và giờ tiêu chuẩn, DATE
, TIME
và TIMESTAMP
(ở một số DB còn được gọi là DATETIME
), được trình bày trong JDBC dưới dạng java.sql.Date
, java.sql.Time
và java.sql.Timestamp
, tất cả lớp con của java.util.Date
. Độ chính xác phụ thuộc vào DB, thường tính bằng mili giây như Java, nhưng cũng có thể tính bằng giây.
Ngược lại với java.util.Date
, java.sql.Date
chỉ chứa thông tin về phần ngày (năm, tháng, ngày). Thời gian
chỉ chứa thông tin về phần thời gian (giờ, phút, giây) và Dấu thời gian
chứa thông tin về cả hai phần, chẳng hạn như java.util.Date
không.
Phương pháp thông thường để lưu trữ dấu thời gian trong DB (do đó, java.util.Date
ở phía Java và java.sql.Timestamp
ở phía JDBC) là sử dụng 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);
Thực tiễn bình thường để lấy dấu thời gian từ DB là sử dụng ResultSet # getTimestamp ()
.
Timestamp timestamp = resultSet.getTimestamp("ts");
java.util.Date date = timestamp; // You can just upcast.