簡介
儲存只代表年、月、日期(例如生日)在處理時區時提出了挑戰。本文探討了使用現代 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中文網其他相關文章!