3
TimeZone utcTimezone_ = TimeZone.getTimeZone("UTC");
TimeZone _utc = TimeZone.getTimeZone("Zulu");
DateFormat _fo = new SimpleDateFormat("yyyy-MM-dd HH:mm");
_fo.setTimeZone(_utc);
GregorianCalendar gc = new GregorianCalendar(_utc);

System.out.println(gc.getTime());
System.out.println(gc.get(GregorianCalendar.MINUTE));
System.out.println(gc.get(GregorianCalendar.HOUR_OF_DAY));

上記のコードを実行したときの出力の例は次のとおりです。

Mon Sep 16 16:40:37 CST 2013
10
7

この場合、分は 40 (10 ではない)、時間は 16 (7 ではない) になると予想しています。現時点で私が理解できないことは何ですか?ありがとう。

編集: タイムゾーンをローカル タイムゾーンである CST に変更しても、分と時間が一致しません。

TimeZone _utc = TimeZone.getTimeZone("CST");
DateFormat _fo = new SimpleDateFormat("yyyy-MM-dd HH:mm");
_fo.setTimeZone(_utc);
GregorianCalendar gc = new GregorianCalendar(_utc);

System.out.println(gc.getTime());
System.out.println(gc.get(GregorianCalendar.MINUTE));
System.out.println(gc.get(GregorianCalendar.HOUR_OF_DAY));

出力は次のとおりです。

Mon Sep 16 21:23:48 CST 2013
53
6
4

3 に答える 3

2
System.out.println(gc.getTime());

この行は、コンピューターのローカル タイムゾーンでカレンダーを出力します (タイムゾーンに関連しないエポック以降のミリ秒数を含む をgetTime()返しDate、暗黙のtoString()呼び出しでローカル タイムゾーンを使用して出力します)。結果によるCSTです。

System.out.println(gc.get(GregorianCalendar.MINUTE));
System.out.println(gc.get(GregorianCalendar.HOUR_OF_DAY));

これらの行は、カレンダー フィールドをカレンダー タイムゾーンで出力します。あなたのコードによると、それは「Zulu」です。

ところで、3 文字のタイムゾーンを使用しないことを強くお勧めします

3 文字のタイム ゾーン ID

JDK 1.1.x との互換性のために、他の 3 文字のタイム ゾーン ID (「PST」、「CTT」、「AST」など) もサポートされています。ただし、同じ略語が複数のタイム ゾーンに使用されることが多く (たとえば、"CST" は米国の "中央標準時" と "中国標準時" である可能性があります)、Java プラットフォームはそのうちの 1 つしか認識できないため、これらの使用は非推奨です。彼ら。

于 2013-09-16T07:24:44.200 に答える
1

System.out.println(gc.getTime()); カレンダーのタイムゾーンをGMTに設定している間、ローカルタイムゾーン-CSTで日付を印刷します。

于 2013-09-16T07:26:09.103 に答える