java.util.Dateからjava.sql.Dateに変換する

こんにちは、さるまりんです。

Javaでよく使う日付を表すDateクラスです。

Dateには2つのクラスがあります。java.util.Datejava.sql.Dateです。java.utilが通常使うもの、java.sqlがSQLのDATE型に合わせたものと認識しています。

java.util.DategetTime()ではGMTで1970年1月1日の0時0分0秒から経過したミリ秒数が取得できるので

java.util.Date utilDate = new new Date();
java.util.sql sqlDate = new java.util.sqlDate(utilDate.getTime());

のようにjava.sql.Date(long date)のコンストラクターを使って生成することができます。

が、ドキュメントには次のような説明があります。

java.sql.Dateのドキュメント

SQL DATEの定義に対応させるために、java.sql.Dateのインスタンスでラップされたミリ秒の値は、インスタンスが関連した特定のタイムゾーンで時間、分、秒、ミリ秒をゼロに設定することで、「標準化」する必要があります。

どういうことか?

簡単にいうと「SQL DATEには時分秒ミリ秒がないのでそこをゼロにしてね」ということですね。

ですので、より正確にjava.util.Dateからjava.sql.Dateに変換するには次のようにします。

java.util.Date utilDate = new java.util.Date();
java.util.Calendar cal = java.util.Calendar.getInstance();
cal.setTime(utilDate);
cal.set(java.util.Calendar.HOUR_OF_DAY, 0);
cal.set(java.util.Calendar.MINUTE, 0);
cal.set(java.util.Calendar.SECOND, 0);
cal.set(java.util.Calendar.MILLISECOND, 0);
java.sql.Date sqlDate = new java.sql.Date(cal.getTimeInMillis());

時分秒ミリ秒を0にしてからjava.sql.Dateを作っています。

java.sql.TimestampSQL TIMESTAMPにあっていて、時分秒ミリ秒ありの状態ではこちらを使います。

その変換は?

java.util.Date = new java.util.Date();
java.sql.Timestamp sqlTimestamp = new java.sql.Timestamp(utilDate.getTime());

こちらはシンプルですね。

読んでくださってありがとうございました。

それではまた!