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

2022-08-31 14:45:00

在Java应用程序中,在使用日期时间和时间戳混合使用MySQL数据库进行外显和输入日期信息方面,有什么好妥协?


答案 1

在Java端,日期通常由(设计不佳,但除此之外)java.util.Date表示。它基本上由纪元时间支持,也被称为时间戳。它包含有关日期和时间部分的信息。在 Java 中,精度以毫秒为单位。long

在SQL端,有几个标准的日期和时间类型,和(在某些数据库也称为),它们在JDBC中表示为java.sql.Datejava.sql.Timejava.sql.Timestamp,所有子类。精度取决于数据库,通常以毫秒为单位,如Java,但它也可以在几秒钟内。DATETIMETIMESTAMPDATETIMEjava.util.Date

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

在数据库中存储时间戳的正常做法(因此,在Java端和JDBC端)是使用ReadyStatement#setTimestamp()java.util.Datejava.sql.Timestamp

java.util.Date date = getItSomehow();
Timestamp timestamp = new Timestamp(date.getTime());
preparedStatement = connection.prepareStatement("SELECT * FROM tbl WHERE ts > ?");
preparedStatement.setTimestamp(1, timestamp);

从数据库获取时间戳的正常做法是使用 ResultSet#getTimestamp()。

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

答案 2

MySQL文档包含有关将MySQL类型映射到Java类型的信息。通常,对于MySQL日期时间和时间戳,您应该使用。一些资源包括:java.sql.Timestamp

http://dev.mysql.com/doc/refman/5.1/en/datetime.html

http://www.coderanch.com/t/304851/JDBC/java/Java-date-MySQL-date-conversion

如何将Java Date存储到Mysql日期时间...?

http://www.velocityreviews.com/forums/t599436-the-best-practice-to-deal-with-datetime-in-mysql-using-jdbc.html

编辑:

正如其他人所指出的那样,使用字符串的建议可能会导致问题。