2012-02-21 9 views
0

JavaからDATETIMEを照会しようとしています。私はサーバーのタイムゾーンを知っていますが、私は期待していたようにタイムゾーンで日時を引き出すことはできません。Javaで指定されたタイムゾーンでmysql DATETIMEを照会します。

ResultSet rs = st.executeQuery(...); 

Date d1=rs.getTime(i, Calendar.getInstance(TimeZone.getTimeZone("UTC"))); 
Date d2=rs.getTime(i, Calendar.getInstance(TimeZone.getTimeZone("PST"))); 

System.out.println("d1: "+d1.getTime()); 
System.out.println("d2: "+d2.getTime()); 

これは私を残します:

d1: 40258000 
d2: 40258000 

は、私がここでの基本的な何かが足りないのですか?

ResultSet.getDate()は、カレンダーを考慮しています。しかし、私はそれが時間情報を切り捨てるのでそれを使うことはできません。まだ変わっています。ResultSet.getTime()はタイムゾーンの変換を処理しません。

+0

「Date.getTime()」は常にGMTで表示されますか? –

+0

ResultSet.getTime()またはDate.getTime()?私は、Date.getTime()がUTCで取得されることを知っています。 – user833970

+0

@ user833970 Jon Skeetが指摘しているように、ResultSet.getTime()はデータベースにタイムゾーン情報が格納されていない場合、タイムゾーンを考慮に入れています(ドキュメントに従って)。あなたの例ではカレンダーを考慮していないので、データベースには情報が格納されていると思います。/ – Tim

答えて

0

documentation状態:

この方法は、基礎となるデータベースがタイムゾーン情報を格納していない場合、時間に適切なミリ秒の値を構築するために指定されたカレンダを使用します。

したがって、データベースには、この場合には、にタイムゾーン情報が格納されていますか?

データベース内のあなたの価値はどのように見え、それは何を表していますか?

-1

DateクラスのgetTimeは、http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Date.html に従ってエポックタイムを返します。これにより、タイムゾーンが調整されます。私はそのページはあなたの現地時間を取得するためにタイムゾーン調整されたカレンダーを使用する必要があることを意味すると思います。

0

別のアプローチは、MySQLサーバをさせることになるタイムゾーンを変換します。例えば

SELECT CONVERT_TZ(timefield,'PST','UTC') AS tf 

UTC時刻にフィールドPSTからtimefieldDATETIME値を変換する(そしてtfとしてそれを返す)です。

関連する問題