1

プログラムが同じ出力/時間を異なる出力で出力するのはなぜTimeZoneですか?

    Calendar cal = GregorianCalendar.getInstance();
    TimeZone timeZone_1 = TimeZone.getTimeZone("Asia/Rangoon");
    cal.setTimeZone(timeZone_1);
    System.out.println(cal.getTime());

    TimeZone timeZone_2 = TimeZone.getTimeZone("Asia/Tokyo");
    cal.setTimeZone(timeZone_2);
    System.out.println(cal.getTime());

出力例:

Thu Nov 22 09:00:33 MMT 2012
Thu Nov 22 09:00:33 MMT 2012        

私の期待される出力は次のとおりです。

Thu Nov 22 09:00:33 MMT 2012
Thu Nov 22 11:30:33 MMT 2012
4

1 に答える 1

3

あなたのコードは問題ありません。間違っているのはデバッグ出力だけです(誤解を招きます)。タイムゾーンに依存しないオブジェクトをcal.getTime()返します。Dateただし、Date.toString()この日付は常にシステムのタイムゾーンとともに出力されます。Date.toString()非常に直感に反する (カレンダー時刻をシステム タイム ゾーンで表示し、ミリ秒数をほとんど保存しない) ため、禁止/非推奨にする必要がありました。

正確なロギングを行うには、代わりにSimpleDateFormatさまざまなメソッドを使用または呼び出します。Calendar.get*()

System.out.println(cal.get(Calendar.HOUR_OF_DAY));
System.out.println(cal.get(Calendar.MINUTE));

また、Java の日付/時刻の処理に関する質問がある場合は、いつものように、を検討してください...

于 2012-11-22T08:06:56.380 に答える