0

再投稿の場合は申し訳ありません。適切な答えが見つかりませんでした。

ベストプラクティスと非推奨のAPIの使用は無視してください。

次の日付「 MonMay1902:16:52EDT2003」を「MM/dd / yyyyHH:mm:ss 」にフォーマットしたいと思います。繰り返しますが、出力形式を変更したいだけで、これはESTにある私のラップトップから実行されています。

私のWindowsの地域設定は次のとおりです。

現在のタイムゾーン:東部夏時間

タイムゾーン:(GMT-05:00)東部標準時(米国およびカナダ)

夏時間の変更に合わせて時計を自動的に調整する:チェック済み

このJavaコードはそれを行います:

Date aDate = new Date("Mon May 19 02:16:52 EDT 2003");
SimpleDateFormat sdf = new SimpleDateFormat( "MM/dd/yyyy HH:mm:ss");
System.out.println("Formatted Date: " + sdf.format(aDate));

出力は

Formatted Date: 05/19/2003 02:16:52

ここで、ウィンドウ設定を次のように変更します(DST設定のチェックを外すだけです)。

現在のタイムゾーン:東部夏時間

タイムゾーン:(GMT-05:00)東部標準時(米国およびカナダ)

夏時間の変更に合わせて時計を自動的に調整する:チェック済み

出力は次のとおりです。

Formatted Date: 05/19/2003 01:16:52

質問:

  1. なぜ出力が1時間ずれているのですか?
  2. フォーマットするときでも、JavaはWindows DST設定を使用しますか?ただし、Javaは、さまざまなタイムゾーンのDST設定時間について独自のデータを保持しています。
4

4 に答える 4

1

Date Java を作成すると、内部的に値が GMT として保存されます。日付を文字列にフォーマットすると、Java はコンピュータのタイム ゾーンを使用して日付をローカル タイム ゾーンに変換します。これが、異なる結果が得られる理由です。例として、自分のコンピューター (タイム ゾーン CEST) で次のコードを実行するとします。

System.out.println(new Date("Mon May 19 02:16:52 UTC 2003"));
System.out.println(new Date("Mon May 19 02:16:52 EDT 2003"));
System.out.println(new Date("Mon May 19 02:16:52 PST 2003"));

次の結果が得られます。

Mon May 19 04:16:52 CEST 2003
Mon May 19 08:16:52 CEST 2003
Mon May 19 12:16:52 CEST 2003

より予測可能な結果が必要な場合は、入力にタイム ゾーンを指定しないか (たとえば、入力と出力が同じタイム ゾーンで実行される限り、同じままです)、より信頼性の高い方法を使用して、どのタイム ゾーンを指定するかを指定できます。使用する:

SimpleDateFormat sdf = new SimpleDateFormat( "MM/dd/yyyy HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("EDT"));
于 2012-04-25T20:09:49.100 に答える
1

サマータイムは通常より1時間早いからです。カレンダーを 1 月に設定すると、違いはわかりません。

于 2012-04-25T19:49:00.920 に答える
1

内部的には、日付は、あるエポックを過ぎたミリ秒数を表す long 値によって格納されます。マシンの夏時間をクリックすると、タイムゾーンが変更されました。したがって、Javaは異なるタイムゾーンで同じ時間番号を使用しているため、あなたが持っているものがあります

于 2012-04-25T19:50:07.863 に答える
0

これは、デフォルトでSimpleDateFormatがシステムのタイムゾーンで日付を出力するためです。これを確認するには、タイムゾーン出力を次の形式に追加します。 "MM / dd / yyyy HH:mm:ss z"したがって、実際に値を出力するタイムゾーンがわかります。

値をフォーマットするタイムゾーンを制御する場合は、DateFormat.setTimeZone(TimeZone z)メソッドを使用します。

于 2012-04-25T19:57:32.823 に答える