JavaのTimezone問題
1192 ワード
今日、サーバにカプセル化されたjava.sql.timestampオブジェクトからローカルクライアントプログラムに戻った後、データベースに戻る時間が14時間も異なるという興味深い問題が発生しました.お客様との時差は14時間なので、大体時差の問題だと疑っていたので、googleで「java.sql.timestamp TimeZone」の問題を探して、文章を見つけて、とても詳しく話しました.
http://archives.postgresql.org/pgsql-jdbc/2008-01/msg00056.php
クライアント・プログラムの実行前にデフォルトのTimeZoneを設定する予定です.
これでサーバ上のデフォルトのTimeZone:kkが得られ、クライアントプログラムの実行前にクライアントプログラムを設定するTimeZoneが必要になります.
また,リモートサーバがオブジェクトをカプセル化する際にStringをそのまま使えば,このような問題はないと思う.
http://archives.postgresql.org/pgsql-jdbc/2008-01/msg00056.php
クライアント・プログラムの実行前にデフォルトのTimeZoneを設定する予定です.
timezone,TimeZone.setDefault(TimeZone);
しかし、私のサーバーのTimeZoneは何ですか?サーバーのデフォルトのTimeZoneを見るためのプログラムを書きましたimport java.util.TimeZone;
public class TestTimeStamp {
public static void main(String[] args) {
TimeZone timeZone=TimeZone.getDefault();
System.out.println(timeZone.getID());
}
}
出力はkkと仮定し、これでサーバ上のデフォルトのTimeZone:kkが得られ、クライアントプログラムの実行前にクライアントプログラムを設定するTimeZoneが必要になります.
timezone,TimeZone.setDefault(TimeZone.getTimeZone("kk"));
そして取得した時間は印刷されるとサーバと一致しますが、java.sql.TimeStampのタイプに従ってサーバに戻ると、時間は元の時間になります.また,リモートサーバがオブジェクトをカプセル化する際にStringをそのまま使えば,このような問題はないと思う.