在Java应用程序中,使用日期时间和时间戳的混合在MySQL数据库中添加和输入日期信息方面有什么好的折衷办法?
在Java方面,日期通常由(设计欠佳,但不包括在内)表示java.util.Date。它基本上是由支持大纪元时间中的味道long,也称为时间戳。它包含有关日期和时间部分的信息。在Java中,精度以毫秒为单位。
java.util.Date
long
在SQL方面,有几个标准的日期和时间类型,DATE,TIME和TIMESTAMP(在一些DB也叫DATETIME),这是代表在JDBC为java.sql.Date,java.sql.Time和java.sql.Timestamp所有 子类 的java.util.Date。精度取决于数据库,通常像Java一样以毫秒为单位,但是也可以以秒为单位。
DATE
TIME
TIMESTAMP
DATETIME
java.sql.Date
java.sql.Time
java.sql.Timestamp
与相反java.util.Date,java.sql.Date仅包含有关日期部分(年,月,日)的信息。像一样,Time仅包含有关时间部分(小时,分钟,秒)的Timestamp信息,并且包含有关两个部分的信息java.util.Date。
Time
Timestamp
在数据库(因此,java.util.Date在Java端和java.sql.TimestampJDBC端)中存储时间戳的通常做法是使用PreparedStatement#setTimestamp()。
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);
从DB获得时间戳的正常做法是使用ResultSet#getTimestamp()。
ResultSet#getTimestamp()
Timestamp timestamp = resultSet.getTimestamp("ts"); java.util.Date date = timestamp; // You can just upcast.