これは私の最初の質問ですが、重要な質問です (そして奇妙な質問です)。私の英語がうまくない場合は申し訳ありませんが、あまり話せません。
Calendar.getInstance() を取得したいときに大きな問題があります。私はJBoss 3.2.5を使用しており、.warアプリ、Java 1.6.0.25(Java 1.7でも同じ問題が発生します)およびWindows 7 Enterpriseを作成しています。Java Web Start でアプリを実行します。
私のアプリケーションのコード(問題が発生する場所)は次のとおりです。
public static void main(final String args[]) {
Calendar c = Calendar.getInstance();
System.out.println(" >>>>>>>>>>>>>>>>>>> " + c.getTimeZone().getDisplayName());
System.out.println(" >>>>>>>>>>>>>>>>>>> " + c.getTimeZone().getID());
System.out.println(" >>>>>>>>>>>>>>>>>>> " + c.getTime());
System.out.println(" ------------------- ");
...
ご覧のとおり、問題はアプリケーションの起動時です。
コントロール パネルで Java キャッシュを有効にすると (Java->General->Temp files->Configuration->Keep temporary files on my computer)、次の結果が得られます。
>>>>>>>>>>>>>>>>>>> Hora de Europa Central
>>>>>>>>>>>>>>>>>>> Europe/Paris
>>>>>>>>>>>>>>>>>>> Thu May 16 16:37:18 CEST 2013
しかし、Java キャッシュを無効にすると、結果は完全に異なります。次のようになります。
>>>>>>>>>>>>>>>>>>> Hora Universal Coordinada
>>>>>>>>>>>>>>>>>>> UTC
>>>>>>>>>>>>>>>>>>> Thu May 16 14:41:48 UTC 2013
それが私の問題です。最初は常に同じ結果が必要です。なぜなら、GMT+1 が必要だからです。夏なので、+1 エクストラがあり、次に GMT+2 があります。
次の文を呼び出すと、常に正しい TimeZone が得られます。
System.getProperty("user.timezone"));
これ:
Europe/Paris
この問題を解決する方法がわかりません。TimeZones、Calendars、DateFormats をキャストしようとしましたが、正しい時刻を取得できません。常に UTC 時刻を取得します。
Java 1.7 では動作が異なります。キャッシュを有効にしますが、クリーンな場合は動作が悪くなりますが、初回のみ、2 回目は正常に動作します (Java キャッシュを再度クリーンアップしない限り)。
これを修正するアイデアはありますか???
どうもありがとう!