モジュール java.base
パッケージ java.time

クラスZoneId

java.lang.Object
java.time.ZoneId
すべての実装されたインタフェース:
Serializable
直系の既知のサブクラス:
ZoneOffset

public abstract class ZoneId extends Object implements Serializable
タイムゾーンID(ヨーロッパ/パリなど)。

ZoneIdは、InstantおよびLocalDateTimeの間の変換に使用するルールを識別するために使用されます。 タイプの異なる2つのIDがあります。

  • 固定オフセット - UTC/グリニッジからの完全に解決されたオフセット、すべてのローカル日付/時間に同じオフセットを使用
  • 地理的地域 - UTC/グリニッジからのオフセットを見つけるために特定のルール・セットが適用される地域
ほとんどの固定オフセットはZoneOffsetで表されます。 ZoneId上でnormalized()を呼び出すことで、固定オフセットIDがZoneOffsetとして表現されることが保証されます。

実際のルールは、オフセットがいつ、どのように変化するかを記述し、ZoneRulesによって定義されます。 このクラスは単純に、基礎となるルールを取得するために使用されるIDです。 この方法は、ルールが政府によって定義されていて頻繁に変わるけれども、IDは固定しているために採用されます。

この違いには他の影響があります。 ZoneIdを直列化するとIDのみが送信されますが、ルールを直列化するとデータ・セット全体が送信されます。 同様に、2つのIDの比較はIDのみを調べますが、2つのルールの比較はデータ・セット全体を調べます。

タイムゾーンID

IDはシステム内で一意です。 3つのタイプのIDがあります。

もっとも単純なタイプのIDはZoneOffsetからのものです。 これは、Zと、+または-で始まるIDで構成されます。

次のタイプのIDは、なんらかの形式の接頭辞を持つ、オフセット・スタイルID(「GMT+2」や「UTC+01:00」など)です。 認識される接頭辞は、UTC、GMTおよびUTです。 オフセットは接尾辞で、作成時に正規化されます。 これらのIDは、normalized()を使用してZoneOffsetに正規化できます。

3番目のタイプのIDは、地域ベースIDです。 地域ベースIDは2つ以上の文字で構成される必要があり、UTC、GMTまたはUT+または-で始まってはいけません。 地域ベースIDは構成で定義されます。ZoneRulesProviderを参照してください。 構成は、IDから基礎となるZoneRulesへのルックアップを提供することを主眼としています。

タイムゾーン・ルールは政府によって定義され、頻繁に変わります。 タイムゾーン変更をモニターしてそれらを照合する組織(グループと呼ばれる)がいくつかあります。 デフォルトグループは、IANAタイムゾーン・データベース(TZDB)です。 他の組織には、IATA (航空業界団体)とMicrosoftが含まれます。

各グループは、提供する地域IDのために独自フォーマットを定義します。 TZDBグループは、Europe/LondonやAmerica/New_YorkなどのIDを定義します。 TZDB IDは、他のグループより優先されます。

重複を避けるために、TZDB以外のグループで提供されるすべてのIDにはグループ名が含まれるようにすることが強く推奨されています。 たとえば、IATA航空タイムゾーン地域IDは、一般的には3文字の空港コードと同じです。 しかし、ユトレヒトの空港はコード「UTC」を持ち、これは明らかに重複です。 TZDB以外のグループからの地域IDに推奨されるフォーマットは、グループ~地域です。 つまり、IATAデータが定義されている場合は、ユトレヒト空港はIATA~UTCになります。

直列化

このクラスは直列化でき、文字列ゾーンIDを外部形式で格納します。 ZoneOffsetサブクラスは、UTC/グリニッジからのオフセットのみを格納する、専用フォーマットを使用します。

ZoneIdは、IDが不明であるJava Runtimeで直列化復元できます。 たとえば、サーバー側Java Runtimeが新しいゾーンIDで更新されたけれども、クライアント側Java Runtimeが更新されていない場合です。 この場合、ZoneIdオブジェクトは存在し、getIdequalshashCodetoStringgetDisplayNameおよびnormalizedを使用して照会できます。 しかし、getRulesへの呼び出しはZoneRulesExceptionで失敗します。 この方法は、タイムゾーン情報が不完全なJava Runtimeで、ZonedDateTimeはロードおよび照会されても変更されないように設計されています。

これはvalue-basedクラスです。プログラマは、equalのインスタンスを交換可能として扱い、同期にインスタンスを使用しないようにする必要があります。そうしないと、予期しない動作が発生する可能性があります。 たとえば、将来のリリースでは、同期が失敗する可能性があります。 比較する場合は、equalsメソッドを使用することをお薦めします。

実装要件:
この抽象クラスは2つの実装を持ち、両方とも不変でスレッドセーフです。 一方の実装は地域ベースIDをモデル化し、もう一方はオフセット・ベースIDをモデル化するZoneOffsetです。 違いは直列化で現れます。
導入されたバージョン:
1.8
関連項目:
  • フィールドのサマリー

    フィールド
    修飾子と型
    フィールド
    説明
    static final Map<String,String>
    短いタイムゾーン名を使用できるようにするためのゾーン・オーバーライドのマップです。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    boolean
    このタイムゾーンIDが別のタイムゾーンIDと等しいかどうかをチェックします。
    static ZoneId
    時間的オブジェクトからZoneIdのインスタンスを取得します。
    static Set<String>
    利用可能なゾーンIDのセットを取得します。
    「英国時間」や「+02:00」など、ゾーンのテキスト表現を取得します。
    abstract String
    一意のタイムゾーンIDを取得します。
    abstract ZoneRules
    計算の実行を許可する、このIDのタイムゾーン・ルールを取得します。
    int
    このタイムゾーンIDのハッシュ・コード。
    タイムゾーンIDを正規化し、可能な場合はZoneOffsetを返します。
    static ZoneId
    of(String zoneId)
    IDからZoneIdのインスタンスを取得し、IDが有効で使用できることを確認します。
    static ZoneId
    of(String zoneId, Map<String,String> aliasMap)
    IDとZoneIdのインスタンスを取得し、別名マップを使用して標準ゾーンIDを補足します。
    static ZoneId
    ofOffset(String prefix, ZoneOffset offset)
    ZoneIdのインスタンスを取得して、オフセットをラップします。
    static ZoneId
    システム・デフォルト・タイムゾーンを取得します。
    IDを使用して、このゾーンをStringとして出力します。

    クラス java.lang.Objectで宣言されたメソッド

    clone, finalize, getClass, notify, notifyAll, wait, wait, wait
  • フィールド詳細

    • SHORT_IDS

      public static final Map<String,String> SHORT_IDS
      短いタイムゾーン名を使用できるようにするためのゾーン・オーバーライドのマップです。

      java.util.TimeZoneでは、短いゾーンIDの使用は非推奨です。 このマップにより、of(String, Map)ファクトリ・メソッド経由でIDを引き続き使用できます。

      このマップには、TZDB 2005r以降に一致するIDのマッピング(EST、MSTおよびHSTからサマー・タイムを含まないIDへのマップ)が含まれます。

      このマップは次のとおりです。

      • EST - -05:00
      • HST - -10:00
      • MST - -07:00
      • ACT - Australia/Darwin
      • AET - Australia/Sydney
      • AGT - America/Argentina/Buenos_Aires
      • ART - Africa/Cairo
      • AST - America/Anchorage
      • BET - America/Sao_Paulo
      • BST - Asia/Dhaka
      • CAT - Africa/Harare
      • CNT - America/St_Johns
      • CST - America/Chicago
      • CTT - Asia/Shanghai
      • EAT - Africa/Addis_Ababa
      • ECT - Europe/Paris
      • IET - America/Indiana/Indianapolis
      • IST - Asia/Kolkata
      • JST - Asia/Tokyo
      • MIT - Pacific/Apia
      • NET - Asia/Yerevan
      • NST - Pacific/Auckland
      • PLT - Asia/Karachi
      • PNT - America/Phoenix
      • PRT - America/Puerto_Rico
      • PST - America/Los_Angeles
      • SST - Pacific/Guadalcanal
      • VST - Asia/Ho_Chi_Minh
      マップは変更できません。

  • メソッドの詳細

    • systemDefault

      public static ZoneId systemDefault()
      システム・デフォルト・タイムゾーンを取得します。

      これは、TimeZone.getDefault()を照会してデフォルト・タイムゾーンを見つけ、それをZoneIdに変換します。 システム・デフォルト・タイムゾーンが変更されると、このメソッドの結果も変わります。

      戻り値:
      ゾーンID、null以外
      例外:
      DateTimeException - 変換されたゾーンIDのフォーマットが無効な場合
      ZoneRulesException - 変換されたゾーン地域IDが見つからない場合
    • getAvailableZoneIds

      public static Set<String> getAvailableZoneIds()
      利用可能なゾーンIDのセットを取得します。

      このセットには、使用可能なすべての地域ベースIDの文字列形式が含まれます。 オフセットベース・ゾーンIDは返されるセットに含まれません。 IDはof(String)に渡してZoneIdを作成できます。

      ゾーンIDのセットは時間経過とともに増える可能性がありますが、一般的アプリケーションではゾーンIDのセットは固定されています。 このメソッドのすべての呼出しはスレッドセーフです。

      戻り値:
      ゾーンIDのセットの変更可能コピー、nullでない
    • of

      public static ZoneId of(String zoneId, Map<String,String> aliasMap)
      IDとZoneIdのインスタンスを取得し、別名マップを使用して標準ゾーンIDを補足します。

      タイムゾーンの多くのユーザーは、PST(Pacific Standard Time)やPDT(Pacific Daylight Time)などの短い略称を使用します。 これらの略称は一意でないため、IDとして使用できません。 このメソッドにより、文字列からタイムゾーンへのマップをアプリケーション内で設定して再利用できます。

      パラメータ:
      zoneId - タイムゾーンID、nullでない
      aliasMap - 別名ゾーンID (一般的には略称)から実際のゾーンIDへのマップ、nullでない
      戻り値:
      ゾーンID、null以外
      例外:
      DateTimeException - ゾーンIDのフォーマットが無効な場合
      ZoneRulesException - ゾーンIDが、見つからない地域IDの場合
    • of

      public static ZoneId of(String zoneId)
      IDからZoneIdのインスタンスを取得し、IDが有効で使用できることを確認します。

      このメソッドはIDを解析してZoneIdまたはZoneOffsetを作成します。 IDがZ、または+または-で始まる場合は、ZoneOffsetが返されます。 結果は常に、ZoneRulesを取得できる有効なIDになります。

      解析では、次のようにゾーンIDをステップ・バイ・ステップに照合します。

      • ゾーンIDがZと等しい場合、結果はZoneOffset.UTCです。
      • ゾーンIDが単一文字で構成される場合は、ゾーンIDは無効で、DateTimeExceptionがスローされます。
      • ゾーンIDが+または-で始まる場合は、ゾーンIDはZoneOffset.of(String)を使用してZoneOffsetとして解析されます。
      • ゾーンIDがGMT、UTCまたはUTと等しい場合は、結果は同じIDおよびZoneOffset.UTCと同等のルールを持つZoneIdです。
      • ゾーンIDがUTC+、UTC-、GMT+、GMT-、UT+またはUT-で始まる場合は、ゾーンIDは接頭辞付きオフセットベースIDです。 IDは、2または3文字の接頭辞と記号で始まる接尾辞の、2つに分割されます。 接尾辞はZoneOffsetとして解析されます。 結果は、指定されたUTC/GMT/UT接頭辞と正規化されたオフセットID(ZoneOffset.getId()など)を持つ、ZoneIdになります。 返されるZoneIdのルールは、解析されたZoneOffsetと同等になります。
      • その他のすべてのIDは、地域ベースゾーンIDとして解析されます。 地域IDは正規表現[A-Za-z][A-Za-z0-9~/._+-]+と一致する必要があり、そうでない場合はDateTimeExceptionがスローされます。 ゾーンIDが構成済IDセット内にない場合は、ZoneRulesExceptionがスローされます。 地域IDの詳細フォーマットは、データを提供するグループによって異なります。 データのデフォルト・セットは、IANAタイムゾーン・データベース(TZDB)で提供されます。 これは、{area}/{city}形式(Europe/Paris、America/New_Yorkなど)の地域IDを持ちます。 これはTimeZoneからのほとんどのIDと互換です。

      パラメータ:
      zoneId - タイムゾーンID、nullでない
      戻り値:
      ゾーンID、null以外
      例外:
      DateTimeException - ゾーンIDのフォーマットが無効な場合
      ZoneRulesException - ゾーンIDが、見つからない地域IDの場合
    • ofOffset

      public static ZoneId ofOffset(String prefix, ZoneOffset offset)
      ZoneIdのインスタンスを取得して、オフセットをラップします。

      接頭辞がGMT、UTCまたはUTの場合、接頭辞とゼロでないオフセットを持つZoneIdが返されます。 接頭辞が空の""の場合は、ZoneOffsetが返されます。

      パラメータ:
      prefix - タイムゾーンID、nullでない
      offset - オフセット、nullでない
      戻り値:
      ゾーンID、null以外
      例外:
      IllegalArgumentException - 接頭辞がGMT、UTC、UTまたは空のいずれでもない場合
    • from

      public static ZoneId from(TemporalAccessor temporal)
      時間的オブジェクトからZoneIdのインスタンスを取得します。

      これは、指定された時間的オブジェクトに基づくゾーンを取得します。 TemporalAccessorは日付および時間情報の任意セットを表し、それをこのファクトリがZoneIdのインスタンスに変換します。

      TemporalAccessorは日付および時間情報のなんらかの形式を表します。 このファクトリは任意の時間的オブジェクトをZoneIdのインスタンスに変換します。

      変換は、TemporalQueries.zone()を使用して、オフセット・ベース・ゾーンより地域ベース・ゾーンを優先する方法でゾーンを取得しようとします。

      このメソッドは関数型インタフェースTemporalQueryのシグネチャに一致するため、メソッド参照ZoneId::fromを介して、問合せとして使用できます。

      パラメータ:
      temporal - 変換する一時オブジェクト、null以外
      戻り値:
      ゾーンID、null以外
      例外:
      DateTimeException - ZoneIdに変換できない場合
    • getId

      public abstract String getId()
      一意のタイムゾーンIDを取得します。

      このIDはこのオブジェクトを一意に定義します。 オフセットベースIDのフォーマットは、ZoneOffset.getId()によって定義されます。

      戻り値:
      タイムゾーンの一意ID、nullでない
    • getDisplayName

      public String getDisplayName(TextStyle style, Locale locale)
      「英国時間」や「+02:00」など、ゾーンのテキスト表現を取得します。

      これは、タイムゾーンIDを識別するために使用される、ユーザーへの提示に適したテキスト名を返します。 パラメータは返されるテキストとロケールのスタイルを制御します。

      テキスト・マッピングが見つからない場合は、フルIDが返されます。

      パラメータ:
      style - 必要なテキストの長さ、nullでない
      locale - 使用するロケール。null以外
      戻り値:
      ゾーンのテキスト値、nullでない
    • getRules

      public abstract ZoneRules getRules()
      計算の実行を許可する、このIDのタイムゾーン・ルールを取得します。

      ルールは、指定されたインスタントまたはローカル日付/時間のオフセットを見つけるなど、タイムゾーンに関連付けられた機能を提供します。

      タイムゾーンは、それが直列化復元されるJava Runtimeに、ルールを格納したJava Runtimeと同じルールがロードされていない場合は、無効になる可能性があります。 kの場合、このメソッドを呼び出すとZoneRulesExceptionがスローされます。

      ルールはZoneRulesProviderによって提供されます。 高度なプロバイダは、Java Runtimeの再起動なしでルールの動的更新をサポートする場合があります。 その場合は、このメソッドの結果が時間経過とともに変わることがあります。 それでも個々の呼出しはスレッドセーフのままです。

      ZoneOffsetは常に、オフセットが変わらないルールのセットを返します。

      戻り値:
      ルール、nullでない
      例外:
      ZoneRulesException - このIDに使用できるルールがない場合
    • normalized

      public ZoneId normalized()
      タイムゾーンIDを正規化し、可能な場合はZoneOffsetを返します。

      このIDのかわりに使用できる、正規化されたZoneIdを返します。 結果は、このオブジェクトによって返されるものと同等のZoneRulesを持ちますが、getId()によって返されるIDが異なる場合があります。

      正規化は、このZoneIdのルールが固定オフセットを持つかどうかをチェックします。 固定オフセットを持つ場合は、そのオフセットに等しいZoneOffsetが返されます。 それ以外の場合は、thisが返されます。

      戻り値:
      タイムゾーンの一意ID、nullでない
    • equals

      public boolean equals(Object obj)
      このタイムゾーンIDが別のタイムゾーンIDと等しいかどうかをチェックします。

      比較はIDベースです。

      オーバーライド:
      equals、クラスObject
      パラメータ:
      obj - チェックするオブジェクト、nullはfalseを返す
      戻り値:
      これが他方のタイムゾーンIDと等しい場合はtrue
      関連項目:
    • hashCode

      public int hashCode()
      このタイムゾーンIDのハッシュ・コード。
      オーバーライド:
      hashCode、クラスObject
      戻り値:
      適切なハッシュ・コード
      関連項目:
    • toString

      public String toString()
      IDを使用して、このゾーンをStringとして出力します。
      オーバーライド:
      toString、クラスObject
      戻り値:
      このタイムゾーンIDの文字列表現、nullでない