Java 的 java.time API 和 MySQL 的 DATE 类型如何处理没有时间或时区信息的日期?
在 Java 和 MySQL 中,处理没有时间或时区信息的日期时,需要理解它们各自的日期类型及其映射方式。
java.time APIJava 的 java.time API 提供了多种类来表示日期和时间,其中 LocalDate 是专门设计用来表示没有时间或时区信息的日期。
LocalDate 的特点2024-12-29),不包含时间部分。DATE 类型映射。
import java.time.LocalDate;
public class Main {
public static void main(String[] args) {
LocalDate date = LocalDate.of(2024, 12, 29);
System.out.println("Date: " + date); // 输出: 2024-12-29
}
}
DATE 类型MySQL 的 DATE 类型表示日期部分,不包含时间或时区信息。
DATE 的特点YYYY-MM-DD。00:00:00(但不会实际存储时间)。
CREATE TABLE events (
event_date DATE
);
INSERT INTO events (event_date) VALUES ('2024-12-29');
SELECT event_date FROM events;
LocalDate 与 MySQL DATE 的映射Java 的 LocalDate 和 MySQL 的 DATE 类型是直接对应的,通常通过 JDBC 驱动程序进行映射。
JDBC 提供了 getObject 和 setObject 方法,可以直接将 MySQL 的 DATE 类型映射为 Java 的 LocalDate。
import java.sql.*;
import java.time.LocalDate;
public class Main {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/testdb";
String username = "root";
String password = "password";
try (Connection conn = DriverManager.getConnection(url, username, password)) {
String query = "SELECT event_date FROM events WHERE id = ?";
PreparedStatement stmt = conn.prepareStatement(query);
stmt.setInt(1, 1);
ResultSet rs = stmt.executeQuery();
if (rs.next()) {
LocalDate date = rs.getObject("event_date", LocalDate.class);
System.out.println("Event Date: " + date);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
LocalDate 到 MySQL
String insertQuery = "INSERT INTO events (event_date) VALUES (?)";
PreparedStatement insertStmt = conn.prepareStatement(insertQuery);
LocalDate eventDate = LocalDate.of(2024, 12, 29);
insertStmt.setObject(1, eventDate);
insertStmt.executeUpdate();
DATE 类型不包含时间或时区信息,存储的值完全是日期。LocalDate 不包含时间或时区信息,表示的值与 MySQL 的 DATE 类型直接对应。java.sql.Datejava.sql.Date 通常用于与数据库交互,但它是 java.util.Date 的子类,仍然带有时间信息(默认为 00:00:00)。java.time.LocalDate,因为它更符合现代设计并且没有时间部分。DATE 和 LocalDate 本身没有时区信息,但数据库连接可能会受到默认时区的影响。
String url = "jdbc:mysql://localhost:3306/testdb?serverTimezone=UTC";
LocalDate 是没有时间或时区信息的日期类,适合与 MySQL 的 DATE 类型直接映射。java.time API(如 LocalDate)代替旧的 java.sql.Date。
2025 年陆剧市场依旧热度爆棚
时间:2025-09-19
阵地央一首播:年度高品质大剧,深度解锁文化抗战三重非凡意义
时间:2025-09-18
陈展鹏刘佩玥《巨塔之后》今首播
时间:2025-08-28
生万物大结局惊现最招恨角色,原来真正的坏都披着善的“羊皮”!
时间:2025-08-28
归队6集燃爆:袁姗姗化身“战地玫瑰”,实战军医双在线超吸睛!
时间:2025-08-28
许凯田曦薇新剧《子夜归》首播,点击率位列第七
时间:2025-08-21