ホームページ >Java >&#&チュートリアル >Java の `java.time` API と MySQL の `DATE` 型は、時刻やタイムゾーン情報のない日付をどのように処理できますか?
はじめに
年、月、誕生日などの日は、タイムゾーンの処理に関して課題を引き起こします。この記事では、最新の 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;
データベースに関する考慮事項
利点
例
次の Java コードを考えてみましょう。 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 中国語 Web サイトの他の関連記事を参照してください。