米国の Ubuntu サーバーで Java アプリケーションを実行しており、CEST タイム ゾーンを構成しています。
ターミナルでDateコマンドを実行すると、CESTゾーン時間で日付が返されます-これは完璧です.
しかし、Javaで次のコードを実行すると
System.out.println (new Date ());
EDT の時間を返します。どのような構成が欠けていますか。
米国の Ubuntu サーバーで Java アプリケーションを実行しており、CEST タイム ゾーンを構成しています。
ターミナルでDateコマンドを実行すると、CESTゾーン時間で日付が返されます-これは完璧です.
しかし、Javaで次のコードを実行すると
System.out.println (new Date ());
EDT の時間を返します。どのような構成が欠けていますか。
コンソールに表示される日付オブジェクトは、このプログラムが実行されている VM のデフォルトの TimeZone (デフォルトでは OS のタイムゾーンから継承される) を使用してフォーマットされるため、解釈には注意が必要です。もちろん、Jesper の回答で説明されているように、独自の TimeZone を指定できます。ただし、そうしている間は、EST の代わりに America/New_York のような IANA タイムゾーン識別子を使用することを強くお勧めします。「標準」を含む略語は、夏時間を考慮していないため、なおさらです。
そのため、単に日付オブジェクトをコンソールに出力しても期待どおりの結果が得られない場合は、サーバーのタイムゾーンが間違った値に設定されているか、OS が間違ったタイムゾーンに設定されている可能性が高くなります。
JVM タイムゾーンを変更するには、起動時にこのパラメーターを使用できます
-Duser.timezone="America/New_York"
サーバーはCESTタイムゾーンになるように構成されていると言いますが、JavaによるとデフォルトのタイムゾーンはEDTです。Java はオペレーティング システムからデフォルトのタイムゾーンを取得するため、サーバーが正しく CEST に設定されていない可能性があります。
特定のタイムゾーンで日付を印刷する場合は、 a を使用しDateFormat
てタイムゾーンを設定します。
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z");
df.setTimeZone(TimeZone.getTimeZone("CET"));
System.out.println(df.format(new Date()));
注: 私の Java (Java 7u45) によると、CEST は有効なタイムゾーンではありません。「CET」のことですか?(CEST は CET の夏時間版ですが、CET を使用すると、必要に応じて Java が自動的に夏時間を表示します)。