方法: 調整規則のないタイム ゾーンを作成する

アプリケーションで必要とされる正確なタイム ゾーン情報が、いくつかの理由で特定のシステムに存在しない場合があります。

  • タイム ゾーンがローカル システムのレジストリに定義されていない。

  • レジストリにあるタイム ゾーンに関するデータが変更または削除された。

  • タイム ゾーンは存在するものの、特定の期間のタイム ゾーン調整の履歴に関する正確な情報がない。

このような場合は、CreateCustomTimeZone メソッドを呼び出して、アプリケーションで必要とされるタイム ゾーンを定義できます。 このメソッドのオーバーロードを使用して、調整規則の有無に関係なくタイム ゾーンを作成できます。 タイム ゾーンで夏時間がサポートされている場合は、固定または浮動調整規則のいずれかを使用して調整を定義できます (これらの用語の定義については、「タイム ゾーンの概要」の「タイム ゾーンの用語」セクションをご覧ください)。

重要

CreateCustomTimeZone メソッドを呼び出すことによって作成されたカスタム タイム ゾーンは、レジストリには追加されません。 代わりに、CreateCustomTimeZone メソッド呼び出しによって返されるオブジェクト参照を通してのみ、これらにアクセスできます。

このトピックでは、調整規則のないタイム ゾーンを作成する方法について説明します。 夏時間調整規則をサポートするタイム ゾーンを作成するには、「方法: 調整規則のあるタイム ゾーンを作成する」をご覧ください。

調整規則のないタイム ゾーンを作成する方法

  1. タイム ゾーンの表示名を定義します。

    表示名はごく標準的な形式に従います。つまり、協定世界時 (UTC) からタイム ゾーンまでのオフセットをかっこで囲み、その後にタイム ゾーン、タイム ゾーンの 1 つまたは複数の都市、またはタイム ゾーンの 1 つまたは複数の国または地域を識別する文字列を続けます。

  2. タイム ゾーンの標準時の名前を定義します。 通常、この文字列はタイム ゾーンの識別子としても使用されます。

  3. タイム ゾーンの標準名とは異なる識別子を使用する場合は、タイム ゾーンの識別子を定義します。

  4. UTC からこのタイム ゾーンまでのオフセットを定義する TimeSpan オブジェクトをインスタンス化します。 時刻が UTC より後のタイム ゾーンは正のオフセットになります。 時刻が UTC より前のタイム ゾーンは負のオフセットになります。

  5. 新しいタイム ゾーンをインスタンス化するには、TimeZoneInfo.CreateCustomTimeZone(String, TimeSpan, String, String) メソッドを呼び出します。

次の例では、調整規則のない南極のモーソン基地のカスタム タイム ゾーンを定義します。

string displayName = "(GMT+06:00) Antarctica/Mawson Time";
string standardName = "Mawson Time";
TimeSpan offset = new TimeSpan(06, 00, 00);
TimeZoneInfo mawson = TimeZoneInfo.CreateCustomTimeZone(standardName, offset, displayName, standardName);
Console.WriteLine("The current time is {0} {1}",
                  TimeZoneInfo.ConvertTime(DateTime.Now, TimeZoneInfo.Local, mawson),
                  mawson.StandardName);
Dim displayName As String = "(GMT+06:00) Antarctica/Mawson Time"
Dim standardName As String = "Mawson Time"
Dim offset As TimeSpan = New TimeSpan(06, 00, 00)
Dim mawson As TimeZoneInfo = TimeZoneInfo.CreateCustomTimeZone(standardName, offset, displayName, standardName)
Console.WriteLine("The current time is {0} {1}", _
                  TimeZoneInfo.ConvertTime(Date.Now, TimeZoneInfo.Local, mawson), _
                  mawson.StandardName)

DisplayName プロパティに割り当てられた文字列は、標準的な形式に従っています。つまり、UTC からタイム ゾーンまでのオフセットの後にタイム ゾーンのわかりやすい説明が続きます。

コードのコンパイル

この例で必要な要素は次のとおりです。

  • 次の名前空間がインポートされていること。

    using System.Collections.Generic;
    using System.Collections.ObjectModel;
    
    Imports System.Collections.Generic
    Imports System.Collections.ObjectModel
    
    

関連項目