MySQL中的时间数据类型主要包括DATETIME
、TIMESTAMP
、DATE
和TIME
。这些类型用于存储日期和时间值。
DATETIME
:存储日期和时间,格式为'YYYY-MM-DD HH:MM:SS',范围从'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。TIMESTAMP
:存储日期和时间,格式也为'YYYY-MM-DD HH:MM:SS',但范围较小,从'1970-01-01 00:00:01' UTC到'2038-01-19 03:14:07' UTC。TIMESTAMP
还有一个特性,即它会根据时区的变化自动更新时间。DATE
:仅存储日期,格式为'YYYY-MM-DD',范围从'1000-01-01'到'9999-12-31'。TIME
:仅存储时间,格式为'HH:MM:SS',范围从'-838:59:59'到'838:59:59'。在Java中,处理日期和时间主要使用java.time
包中的类,如LocalDateTime
、LocalDate
、LocalTime
、ZonedDateTime
等。
java.time
包提供了现代化、线程安全且易于使用的日期和时间处理API。以下是一些常见的MySQL时间类型与Java代码之间的转换示例:
DATETIME
LocalDateTime
// 从数据库读取
ResultSet resultSet = statement.executeQuery("SELECT datetime_column FROM table_name WHERE id = 1");
if (resultSet.next()) {
LocalDateTime dateTime = resultSet.getObject("datetime_column", LocalDateTime.class);
System.out.println(dateTime);
}
// 插入到数据库
LocalDateTime now = LocalDateTime.now();
PreparedStatement preparedStatement = connection.prepareStatement("INSERT INTO table_name (datetime_column) VALUES (?)");
preparedStatement.setObject(1, now);
preparedStatement.executeUpdate();
TIMESTAMP
Instant
或 LocalDateTime
(注意:TIMESTAMP
在MySQL中与系统时区有关)// 从数据库读取
ResultSet resultSet = statement.executeQuery("SELECT timestamp_column FROM table_name WHERE id = 1");
if (resultSet.next()) {
Timestamp timestamp = resultSet.getTimestamp("timestamp_column");
Instant instant = timestamp.toInstant();
System.out.println(instant);
}
// 插入到数据库
Instant now = Instant.now();
PreparedStatement preparedStatement = connection.prepareStatement("INSERT INTO table_name (timestamp_column) VALUES (?)");
preparedStatement.setTimestamp(1, Timestamp.from(now));
preparedStatement.executeUpdate();
DATE
LocalDate
// 从数据库读取
ResultSet resultSet = statement.executeQuery("SELECT date_column FROM table_name WHERE id = 1");
if (resultSet.next()) {
LocalDate date = resultSet.getObject("date_column", LocalDate.class);
System.out.println(date);
}
// 插入到数据库
LocalDate today = LocalDate.now();
PreparedStatement preparedStatement = connection.prepareStatement("INSERT INTO table_name (date_column) VALUES (?)");
preparedStatement.setObject(1, today);
preparedStatement.executeUpdate();
TIME
LocalTime
// 从数据库读取
ResultSet resultSet = statement.executeQuery("SELECT time_column FROM table_name WHERE id = 1");
if (resultSet.next()) {
LocalTime time = resultSet.getObject("time_column", LocalTime.class);
System.out.println(time);
}
// 插入到数据库
LocalTime now = LocalTime.now();
PreparedStatement preparedStatement = connection.prepareStatement("INSERT INTO table_name (time_column) VALUES (?)");
preparedStatement.setObject(1, now);
preparedStatement.executeUpdate();
DATETIME
或TIMESTAMP
记录操作的时间戳。DATE
存储特定日期,如生日、会议日期等。TIME
记录一天中的某个时间点,如开始工作、结束工作等。DateTimeFormatter
类进行格式化。NullPointerException
。希望这些信息能帮助你更好地理解MySQL时间类型与Java代码之间的转换和应用。
领取专属 10元无门槛券
手把手带您无忧上云