一尘不染

在Java中处理MySQL日期时间和时间戳

java

在Java应用程序中,使用日期时间和时间戳的混合在MySQL数据库中添加和输入日期信息方面有什么好的折衷办法?


阅读 677

收藏
2020-03-12

共1个答案

一尘不染

在Java方面,日期通常由(设计欠佳,但不包括在内)表示java.util.Date。它基本上是由支持大纪元时间中的味道long,也称为时间戳。它包含有关日期和时间部分的信息。在Java中,精度以毫秒为单位。

在SQL方面,有几个标准的日期和时间类型,DATE,TIME和TIMESTAMP(在一些DB也叫DATETIME),这是代表在JDBC为java.sql.Date,java.sql.Timejava.sql.Timestamp所有子类的java.util.Date。精度取决于数据库,通常像Java一样以毫秒为单位,但是也可以以秒为单位。

与相反java.util.Datejava.sql.Date仅包含有关日期部分(年,月,日)的信息。像一样,Time仅包含有关时间部分(小时,分钟,秒)的Timestamp信息,并且包含有关两个部分的信息java.util.Date

在数据库(因此,java.util.Date在Java端和java.sql.TimestampJDBC端)中存储时间戳的通常做法是使用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()

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