在Java端,日期通常由(设计不当,但是搁置)
java.util.Date表示。它基本上支持
Epoch time在一个长的,也称为时间戳的味道。它包含有关日期和时间部分的信息。在Java中,精度为毫秒。
在SQL端,有几个标准的日期和时间类型,DATE,TIME和TIMESTAMP(在某些DB也称为DATETIME),在JDBC中表示为java.sql.Date,java.sql.Time和java.sql.Timestamp,java.util.Date的所有子类。精度是DB依赖的,通常以毫秒为单位,如Java,但也可以在几秒钟内。
与java.util.Date相反,java.sql.Date仅包含有关日期部分(年,月,日)的信息。时间只包含有关时间部分(小时,分钟,秒)的信息,Timestamp包含有关这两个部分的信息,如java.util.Date所做。
在DB中存储时间戳(因此,Java端的java.util.Date和JDBC端的java.sql.Timestamp)的正常做法是使用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);
Timestamp timestamp = resultSet.getTimestamp("ts");
java.util.Date date = timestamp; // You can just upcast.