3

このコードを書くとき:

   Calendar cal = Calendar.getInstance();
   cal.setTimeZone(TimeZone.getTimeZone("EST"));
   System.out.println(cal.getTimeZone().getDisplayName());

出力は

   Eastern Standard Time

しかし、このコードを書くと:

   Calendar cal = Calendar.getInstance();
   cal.setTimeZone(TimeZone.getTimeZone("est"));
   System.out.println(cal.getTimeZone().getDisplayName());

私が得る出力は次のとおりです。

   GMT-05:00

設定時に「EST」や「est」などの引数を与えることに違いはありますかTimeZone.setTimeZone(String str)strCASE SENSITIVEと見なされる呼び出し時に渡されます)?

APIはそれについて何も言及していません:

getTimeZone

public static TimeZone getTimeZone(String ID)

Gets the TimeZone for the given ID.

Parameters:  
ID - the ID for a TimeZone, either an abbreviation such as "PST", a full name such as "America/Los_Angeles", or a custom ID such as "GMT-8:00".   
Note that the support of abbreviations is for JDK 1.1.x compatibility only and full names should be used.

Returns:
the specified TimeZone, or the GMT zone if the given ID cannot be understood.

IST注:と文字列を試しましistた。それISTが与える文字列とIndian Standard Timeそれistが与えるものGreenwich Mean Time

4

2 に答える 2

3

つまり、大文字と小文字が区別されます。

このようなIDのタイムゾーンが見つからないため、例に従うと、デフォルトの結果が得られistます。GMT

est確かに両方のIDがわかっているので、 (GMT-05:00is )で動作しEASTERN STANDARD TIMEますが、私はそれを当てにしません(プラットフォームを変更してもまだ存在するかどうかはわかりません)。

さらに、APIで指示されているように、これらの省略IDを使用するのではなく、直接フルネームまたはカスタムIDを使用する必要があります。

を使用して、プラットフォームで使用可能なIDのリストを作成しTimeZone.getAvailableIDs()、適切なIDを選択できます。

私自身、フォーマットの使用を検討したいと思いGMT-5:00ます。フォーマットは、私の意見では、読みやすく、エラーが発生しにくいものです。

于 2012-11-05T11:59:09.643 に答える
3

getTimeZone(String id) の実装は、実際には JDK 7 から 8 に変更されました。

JDK 7 では、「est」は実際には ID「est」の timeZone を返します。次のテスト ケースを Java 7 で実行すると成功します (Java 8 では失敗します)。

@Test
public void estTimeZoneJava7() {
    TimeZone timeZone = TimeZone.getTimeZone("est");
    assertEquals("est", timeZone.getID()) ;
}

Java 8 では、タイムゾーン「est」は実際には不明なタイムゾーンとして処理され、実際には ID「GMT」の GMT タイムゾーンが返されます。次のテスト ケースは、Java 8 では成功します (Java 7 では失敗します)。

@Test
public void estTimeZoneJava8() {
    TimeZone timeZone = TimeZone.getTimeZone("est");
    assertEquals("GMT", timeZone.getID());
}
于 2015-05-08T21:28:21.687 に答える