简介
存储仅代表年、月、日期(例如生日)在处理时区时提出了挑战。本文探讨了使用现代 Java API 解决此问题的优雅解决方案。
挑战
传统的 Java 日期时间表示(例如 java.util.Date)包括时间和时区组件。存储没有特定时间或时区的抽象日期会引起对不同时区的不同环境之间保持一致性的担忧。
解决方案:java.time
Java SE 8引入了 java.time API,它提供了一种强大而有效的方法来处理日期时间计算。 LocalDate 是这个 API 中的一个关键类,代表一个没有任何时间或时区信息的日期。
例如:
LocalDate birthday = LocalDate.of(1990, 1, 1);
这个代码代表 1990 年 1 月 1 日的生日,无论什么时候机器的时区。
映射到MySQL
LocalDate 映射到 ANSI SQL 类型 DATE,如下所示:
ALTER TABLE persons ADD COLUMN birthday DATE;
数据库注意事项
好处
示例
考虑以下存储MySQL 数据库中的出生日期:
// Store a birthday in UTC: String query = "INSERT INTO persons (birthday) VALUES (?)"; PreparedStatement statement = connection.prepareStatement(query); statement.setObject(1, birthday); // Retrieve birth date from database in UTC: String query = "SELECT birthday FROM persons WHERE id = ?"; PreparedStatement statement = connection.prepareStatement(query); statement.setInt(1, personId); ResultSet resultSet = statement.executeQuery(); LocalDate birthday = resultSet.getObject("birthday", LocalDate.class);
此代码确保存储生日并作为纯日期值检索,没有任何时间或时区信息。
以上是Java 的 java.time API 和 MySQL 的 DATE 类型如何处理没有时间或时区信息的日期?的详细内容。更多信息请关注PHP中文网其他相关文章!