この記事の英語版を表示するには、[英語] のチェック ボックスをオンにしてください。また、テキストにマウス ポインターを合わせると、ポップアップ ウィンドウに英語のテキストを表示することもできます。
翻訳
英語

方法 : TimeZoneInfo オブジェクトをインスタンス化する

 

TimeZoneInfo オブジェクトをインスタンス化する最も一般的な方法は、レジストリからオブジェクトに関する情報を取得することです。 このトピックでは、ローカル システムのレジストリから TimeZoneInfo オブジェクトをインスタンス化する方法について説明します。

TimeZoneInfo オブジェクトをインスタンス化するには

  1. TimeZoneInfo オブジェクトを宣言します。

  2. static (Visual Basic では Shared) TimeZoneInfo.FindSystemTimeZoneById メソッドを呼び出します。

  3. メソッドによってスローされる例外 (特に、タイム ゾーンがレジストリで定義されていない場合にスローされる TimeZoneNotFoundException) を処理します。

次のコードでは、東部標準時のタイム ゾーンを表す TimeZoneInfo オブジェクトを取得し、現地時刻に対応する東部標準時の時刻を表示します。

DateTime timeNow = DateTime.Now;
try
{
   TimeZoneInfo easternZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
   DateTime easternTimeNow = TimeZoneInfo.ConvertTime(timeNow, TimeZoneInfo.Local, 
                                                   easternZone);
   Console.WriteLine("{0} {1} corresponds to {2} {3}.",
                     timeNow, 
                     TimeZoneInfo.Local.IsDaylightSavingTime(timeNow) ?
                               TimeZoneInfo.Local.DaylightName : 
                               TimeZoneInfo.Local.StandardName,
                     easternTimeNow, 
                     easternZone.IsDaylightSavingTime(easternTimeNow) ?
                                 easternZone.DaylightName : 
                                 easternZone.StandardName);
}
// Handle exception
//
// As an alternative to simply displaying an error message, an alternate Eastern
// Standard Time TimeZoneInfo object could be instantiated here either by restoring
// it from a serialized string or by providing the necessary data to the
// CreateCustomTimeZone method.
catch (TimeZoneNotFoundException)
{
   Console.WriteLine("The Eastern Standard Time Zone cannot be found on the local system.");
}  
catch (InvalidTimeZoneException)
{
   Console.WriteLine("The Eastern Standard Time Zone contains invalid or missing data.");
}
catch (SecurityException)
{
   Console.WriteLine("The application lacks permission to read time zone information from the registry.");
}
catch (OutOfMemoryException)
{
   Console.WriteLine("Not enough memory is available to load information on the Eastern Standard Time zone.");
}
// If we weren't passing FindSystemTimeZoneById a literal string, we also 
// would handle an ArgumentNullException.

TimeZoneInfo.FindSystemTimeZoneById メソッドの唯一のパラメーターは、取得するタイム ゾーンの識別子です。これは、オブジェクトの TimeZoneInfo.Id プロパティに対応します。 タイム ゾーン ID は、タイム ゾーンを一意に識別するキー フィールドです。 ほとんどのキーは比較的短いですが、タイム ゾーン ID はいくぶん長めです。 ほとんどの場合、ID の値は、タイム ゾーンの標準時刻の名前を表すために使用される TimeZoneInfo オブジェクトの StandardName プロパティに対応します。 ただし、例外もあります。 有効な識別子を確実に指定する最良の方法は、システムで使用できるタイム ゾーンを列挙し、対応するタイム ゾーン識別子を記録しておくことです。 この具体例については、「方法 : コンピューター上に存在するタイム ゾーンを列挙する」を参照してください。 ローカル システムで定義されているタイム ゾーンの検索 トピックにも、選択したタイム ゾーン識別子の一覧があります。

タイム ゾーンが見つかると、メソッドは TimeZoneInfo オブジェクトを返します。 タイム ゾーンが見つからない場合、メソッドから TimeZoneNotFoundException がスローされます。 タイム ゾーンが見つかっても、そのデータが破損しているか不完全な場合には、メソッドから InvalidTimeZoneException がスローされます。

アプリケーションが依存するタイム ゾーンが必ず存在していなければならない場合は、最初に FindSystemTimeZoneById メソッドを呼び出して、レジストリからタイム ゾーンの情報を取得する必要があります。 メソッドの呼び出しが失敗した場合は、例外ハンドラーで、タイム ゾーンの新しいインスタンスを作成するか、シリアル化された TimeZoneInfo オブジェクトを逆シリアル化してインスタンスを作成し直す必要があります。 例については、「方法 : 埋め込みリソースからタイム ゾーンを復元する」を参照してください。

表示: