こんにちは、さるまりんです。
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());
こちらはシンプルですね。
読んでくださってありがとうございました。
それではまた!