0

Oracle DB に対してヒキガエルでこのクエリを実行すると、次のようになります。

select 
to_char(TRUNC(sysdate, 'DAY'),'DAY') start_of_the_week
from dual;

ロケール サーバーの設定に応じて、次のようになります。

Sunday --EN, USA
Monday -- DE, GERMANY

これは完全に理にかなっていて、大丈夫です。

次のように、OJDBC ドライバーを介して Java でまったく同じことを行う場合:

//....
Statement stm = JDBCConn.createStatement();
stm.execute("select to_char(TRUNC(sysdate, 'DAY'),'DAY') start_of_the_week from dual");
stm.getResultSet().next();
System.out.println(stm.getResultSet().getString("start_of_the_week"));

日曜日または月曜日に返されますが、これは、このステートメントを実行している JVM に提供されたクライアントのローカル設定によって異なります。これは、返される回答がサーバーのローカル設定ではなく、クライアントの設定に依存することを意味します。

修正は本当に簡単です、追加してください

Locale.setDefault(new Locale("EN", "US", "WIN")); //or German etc..

さて、私の実際の質問に移ります。なぜ誰もがこれが良い考えだと思うでしょうか?!? これが理にかなっている状況はありますか?私の意見では、これはバグであるか、少なくとも非常に悪い設計/コンセプトであるため、これは機能ですか。

よろしく、コリン

4

1 に答える 1

0

これはおそらく jdbc ドライバー機能です

Locale.setDefault - アプリケーションの他の部分に影響を与える jvm のデフォルトを設定します。

Oracleでは、タイムスタンプの種類の列を処理するときと、それらをJavaにマップする方法にも注意する必要があります

http://tonyhasler.wordpress.com/2010/09/04/tonys-tirade-against-timestamp-with-time-zone/を参照してください 。

夏時間とタイム ゾーンのベスト プラクティス

Oracle JDBC ドライバーで、Java 日付を TIMESTAMP 列に書き込むとタイムゾーンはどうなりますか?

于 2014-08-13T17:47:16.503 に答える