4

特定のタイムゾーンで現在の時刻を取得しようとしています。次のコードを試しました。

Calendar j = new GregorianCalendar(TimeZone.getTimeZone("US/Mountain"));
j.setTimeInMillis(Calendar.getInstance().getTimeInMillis());
System.out.println(j.get(Calendar.HOUR_OF_DAY)+":"+j.get(Calendar.MINUTE));
TimeZone tz = TimeZone.getTimeZone("US/Mountain");
System.out.println("tz.getRawOffset()"+tz.getRawOffset()/3600);
System.out.println(tz.getDSTSavings());
System.out.println

(tz.inDaylightTime(new Date()));

私が得た答えは驚くべきものでした. フェニックスまたは米国の他の都市の正確な壁時計の時刻を取得するにはどうすればよいですか?

4

4 に答える 4

10

アリゾナはマウンテン タイムゾーンにありますが、DST を遵守していません。タイムゾーンに「US/Mountain」を指定すると、コンピューターはマウンテン タイム ゾーンのほとんどの州で使用されるルールを適用します。これには、夏時間の適用が含まれます。アリゾナ (DST を含まない) のルールを取得するには、タイムゾーン "US/Arizona" (または "America/Phoenix") が必要です。ナバホの国では、「ナバホ」という名前のタイムゾーンが必要です。

手間を省くために、常に "America/*" の名前を使用するようにしてください。ここでは、関心のある場所と同じタイムゾーン ルールを持つ都市の名前を選択できます。

世界中の特定の都市の正しいタイムゾーンで正確な時刻を取得するには、オルソン タイムゾーン データベースの名前とその意味を理解する必要があります。通常、「タイム ゾーン」という用語は真冬の時刻 (誰もが標準時を遵守するとき) を意味すると考えられますが、Olson データベースでは、タイム ゾーン名は夏時間規則とタイム ゾーン規則の全履歴を表します。特定の地域のために。

例として、インディアナ州は現在東部時間を観察し、DST を観察していますが (シカゴのように中部時間であるシカゴのすぐ近くのいくつかの郡を除いて)、2006 年以前は DST を観察していませんでした。「US/Indiana」(または「America/Indianapolis」) という名前のタイムゾーンは、この地域をカバーするために作成されました。今日でも、インディアナについて話すときは、「America/Indianapolis」というタイムゾーンを使用することをお勧めします。 2006 年以前は正しく答えることができます。

于 2010-10-31T23:22:11.797 に答える
3

アリゾナ州のほとんどはサマータイムを実施していませんが、アリゾナ州内のナバホ族DST を実施しています。

于 2010-10-31T23:14:35.253 に答える
1

ゾーン情報は、世界中の多くの主要都市について直接取得できます。これには、ゾーン識別子「America/Phoenix」を持つ Phoenix が含まれます。

TimeZone.getAvailableIDs()メソッドを使用するか、JRE lib/ziディレクトリの内容を手動で検査することにより、使用可能なゾーン ID のリストを見つけることができます。

他の投稿者が指摘しているように、「US/Arizona」ゾーン情報は「US/Mountain」とは異なります。

于 2010-10-31T23:32:36.413 に答える
1

私は現代的な答えを提供しています。Calendarクラス、GregorianCalendarTimeZoneおよび を使用しないでくださいDate。それらはすべて設計が不十分で、幸いなことにすべて古くなってしまいました。

java.time

方法がわかれば簡単です。

    ZonedDateTime arizonaExceptNavajo = ZonedDateTime.now(ZoneId.of("America/Phoenix"));
    System.out.println(arizonaExceptNavajo);

このコードを実行したところ、出力は次のようになりました。

2019-10-23T04:07:23.034-07:00[アメリカ/フェニックス]

US/Mountain タイム ゾーン ID は非推奨です。これはアメリカ/デンバーへのリンクであり、アメリカ/デンバーは夏時間 (夏時間、DST) を使用しています。最新のタイム ゾーン ID は、地域/都市の形式を持ち、地域はアメリカのような大陸または太平洋のような海のいずれかです。

他の方もおっしゃっていますが、ナバホ族であるアリゾナ州のある場所ではサマータイムが使われています。言及されているNavajoタイムゾーン ID も非推奨です。アメリカ/デンバーを使用:

    ZonedDateTime navajoNation = ZonedDateTime.now(ZoneId.of("America/Denver"));
    System.out.println(navajoNation);

2019-10-23T05:07:23.037-06:00[アメリカ/デンバー]

夏時間がまだ有効であるため、時刻は上のフェニックスの時刻よりも 1 時間進んでいます。

リンク

于 2019-10-23T11:07:42.093 に答える