首頁 > Java > java教程 > Java 的 java.time API 和 MySQL 的 DATE 類型如何處理沒有時間或時區資訊的日期?

Java 的 java.time API 和 MySQL 的 DATE 類型如何處理沒有時間或時區資訊的日期?

Barbara Streisand
發布: 2024-12-29 14:33:11
原創
423 人瀏覽過

How Can Java's `java.time` API and MySQL's `DATE` Type Handle Dates Without Time or Timezone Information?

Java/MySQL 中沒有時間或時區的日期

簡介

儲存只代表年、月、日期(例如生日)在處理時區時提出了挑戰。本文探討了使用現代 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 資料庫內部以UTC格式儲存 DATE 值,但在下列情況下它們會以客戶端的時區顯示:
  • JDBC 驅動程式在資料庫互動期間處理 UTC 和本機時區之間必要的轉換。

好處

    確保不同時區的一致日期表示。
  • 消除了複雜的需要時區計算或字串操作。
  • 簡化資料庫模式設計與資料擷取操作。

範例

考慮以下儲存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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板