Information
2009-02-19
java.util.Dateをjava.sql.Dateにきちんと変換する方法
多くの人はこうやればいいと思っているかもしれません。
java.util.Date d = new java.util.Date(); java.sql.Date d2 = new java.sql.Date(d.getTime());
確かにこれでも一応変換はできますが、きちんと変換してはいません。java.sql.DateのJavadocを見るとこう書いてあります。
SQL DATE の定義に対応させるために、java.sql.Date のインスタンスでラップされたミリ秒の値は、インスタンスが関連した特定のタイムゾーンで時間、分、秒、ミリ秒をゼロに設定することで、「標準化」する必要があります。
つまり、java.util.Date#getTime()をjava.sql.Dateにただ渡すだけでは不十分で、「特定のタイムゾーンで時間、分、秒、ミリ秒をゼロに設定しなければいけない」のです。それも、開発者が。
では、きちんと変換するコードを見てみましょう。
java.util.Date d = new java.util.Date(); Calendar cal = Calendar.getInstance(); cal.setTime(d); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); cal.set(Calendar.MILLISECOND, 0); java.sql.Date d2 = new java.sql.Date(cal.getTimeInMillis());
ちなみに、java.util.Dateをjava.sql.Timeに変換するには次のようにします。
java.util.Date d = new java.util.Date(); Calendar cal = Calendar.getInstance(); cal.setTime(d); cal.set(Calendar.YEAR, 1970); cal.set(Calendar.MONTH, Calendar.JANUARY); cal.set(Calendar.DATE, 1); java.sql.Time t = new java.sql.Time(cal.getTimeInMillis());
トラックバック - http://d.hatena.ne.jp/higayasuo/20090219/1235020303
リンク元
- 126 http://reader.livedoor.com/reader/
- 84 http://www.google.co.jp/search?q=ひがやすお&sourceid=navclient-ff&ie=UTF-8&rlz=1B3GGGL_jaJP297JP297
- 52 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rlz=1T4GGLJ_jaJP269JP269&q=日本IBM
- 50 http://www.google.co.jp/search?hl=ja&q=ひがやすを&btnG=Google+検索&meta=lr=&aq=f
- 34 http://b.hatena.ne.jp/hotentry/it
- 25 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:ja:official&hs=cK2&q=ひがやすを ISID&btnG=検索&lr=lang_ja
- 23 http://www.google.co.jp/reader/view/
- 23 http://www.google.com/reader/view/
- 22 http://b.hatena.ne.jp/hotentry
- 21 http://d.hatena.ne.jp/f-star/20090219/p36