こんにちは、さるまりんです。
Javaでよく使う日付を表すDate
クラスです。
Date
には2つのクラスがあります。java.util.Date
とjava.sql.Date
です。java.util
が通常使うもの、java.sql
がSQLのDATE型に合わせたものと認識しています。
java.util.Date
のgetTime()
では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)のコンストラクターを使って生成することができます。
が、ドキュメントには次のような説明があります。
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.Timestamp
はSQL TIMESTAMP
にあっていて、時分秒ミリ秒ありの状態ではこちらを使います。
その変換は?
java.util.Date = new java.util.Date();
java.sql.Timestamp sqlTimestamp = new java.sql.Timestamp(utilDate.getTime());
こちらはシンプルですね。
読んでくださってありがとうございました。
それではまた!