方法: コンピューターに存在するタイム ゾーンを列挙How to: Enumerate time zones present on a computer

指定されたタイム ゾーンを正しく処理するには、そのタイム ゾーンに関する情報がシステムで使用できる必要があります。Successfully working with a designated time zone requires that information about that time zone be available to the system. Windows XP および Windows Vista オペレーティング システムでは、この情報をレジストリに格納します。The Windows XP and Windows Vista operating systems store this information in the registry. しかし、世界中に存在するタイム ゾーンの合計数は大きいものの、レジストリにはそれらの一部に関する情報しか含まれません。However, although the total number of time zones that exist throughout the world is large, the registry contains information about only a subset of them. さらに、レジストリ自体は、内容が意図的に、および誤って変更される可能性がある動的な構造です。In addition, the registry itself is a dynamic structure whose contents are subject to both deliberate and accidental change. その結果、アプリケーションは、特定のタイム ゾーンがシステムで定義され、使用できると常に想定することができません。As a result, an application cannot always assume that a particular time zone is defined and available on a system. タイム ゾーン情報のアプリケーションを使用する多くのアプリケーションの最初の手順は、必要なタイム ゾーンがローカル システムで使用できるかどうかを判断する、またはタイム ゾーンの一覧をユーザーに提供して選択させることです。The first step for many applications that use time zone information applications is to determine whether required time zones are available on the local system, or to give the user a list of time zones from which to select. これには、アプリケーションがローカル システムで定義されているタイム ゾーンを列挙する必要があります。This requires that an application enumerate the time zones defined on a local system.

注意

アプリケーションがローカル システムで定義されていない可能性があります、特定のタイム ゾーンの存在に依存している場合、アプリケーションは、およびタイム ゾーンの情報を逆シリアル化によってその存在を保証できます。If an application relies on the presence of a particular time zone that may not be defined on a local system, the application can ensure its presence by serializing and deserializing information about the time zone. アプリケーション ユーザーが選択できるように、リスト コントロールにタイム ゾーンを追加し、できます。The time zone can then be added to a list control so that the application user can select it. 詳細については、「する方法: 埋め込みリソースにタイム ゾーンを保存する方法: 埋め込みリソースからタイム ゾーンを復元です。For details, see How to: Save Time Zones to an Embedded Resource and How to: Restore time zones from an embedded resource.

ローカル システムに存在するタイム ゾーンを列挙するにはTo enumerate the time zones present on the local system

  1. TimeZoneInfo.GetSystemTimeZones メソッドを呼び出します。Call the TimeZoneInfo.GetSystemTimeZones method. メソッドがジェネリック型を返しますReadOnlyCollection<T>のコレクションTimeZoneInfoオブジェクト。The method returns a generic ReadOnlyCollection<T> collection of TimeZoneInfo objects. コレクション内のエントリがにより並べ替えられた、DisplayNameプロパティです。The entries in the collection are sorted by their DisplayName property. 例えば:For example:

    ReadOnlyCollection<TimeZoneInfo> tzCollection;
    tzCollection = TimeZoneInfo.GetSystemTimeZones();
    
    Dim tzCollection As ReadOnlyCollection(Of TimeZoneInfo) = TimeZoneInfo.GetSystemTimeZones
    
  2. 個々 の列挙TimeZoneInfoを使用してコレクション内のオブジェクト、foreachループ (c#) またはFor Eachしています.NextEnumerate the individual TimeZoneInfo objects in the collection by using a foreach loop (in C#) or a For EachNext (Visual Basic の場合) のループし、各オブジェクトに対して、必要な処理を実行します。loop (in Visual Basic), and perform any necessary processing on each object. たとえば、次のコードを列挙、ReadOnlyCollection<T>のコレクションTimeZoneInfoで返される手順 1 のオブジェクトし、コンソールには、各タイム ゾーンの表示名を一覧表示します。For example, the following code enumerates the ReadOnlyCollection<T> collection of TimeZoneInfo objects returned in step 1 and lists the display name of each time zone on the console.

    foreach (TimeZoneInfo timeZone in tzCollection)
       Console.WriteLine("   {0}: {1}", timeZone.Id, timeZone.DisplayName);
    
    For Each timeZone As TimeZoneInfo In tzCollection
       Console.WriteLine("   {0}: {1}", timeZone.Id, timeZone.DisplayName)
    Next
    

ローカル システムに存在するタイム ゾーンの一覧をユーザーに表示するにはTo present the user with a list of time zones present on the local system

  1. TimeZoneInfo.GetSystemTimeZones メソッドを呼び出します。Call the TimeZoneInfo.GetSystemTimeZones method. メソッドがジェネリック型を返しますReadOnlyCollection<T>のコレクションTimeZoneInfoオブジェクト。The method returns a generic ReadOnlyCollection<T> collection of TimeZoneInfo objects.

  2. 手順 1. で返されるコレクションに割り当てる、DataSourceプロパティの Windows フォームや ASP.NET リスト コントロール。Assign the collection returned in step 1 to the DataSource property of a Windows forms or ASP.NET list control.

  3. 取得、TimeZoneInfoユーザーが選択したオブジェクト。Retrieve the TimeZoneInfo object that the user has selected.

この例では、Windows アプリケーションの具体的なを提供します。The example provides an illustration for a Windows application.

Example

例では、リスト ボックスで、システムで定義されているタイム ゾーンを表示する Windows アプリケーションを起動します。The example starts a Windows application that displays the time zones defined on a system in a list box. 例では、値を含むダイアログ ボックスを表示、DisplayNameユーザーが選択したタイム ゾーン オブジェクトのプロパティです。The example then displays a dialog box that contains the value of the DisplayName property of the time zone object selected by the user.

private void Form1_Load(object sender, EventArgs e)
{
   ReadOnlyCollection<TimeZoneInfo> tzCollection; 
   tzCollection = TimeZoneInfo.GetSystemTimeZones();
   this.timeZoneList.DataSource = tzCollection;
}

private void OkButton_Click(object sender, EventArgs e)
{
   TimeZoneInfo selectedTimeZone = (TimeZoneInfo) this.timeZoneList.SelectedItem;
   MessageBox.Show("You selected the " + selectedTimeZone.ToString() + " time zone.");
}
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
   Dim tzCollection As ReadOnlyCollection(Of TimeZoneInfo)
   tzCollection = TimeZoneInfo.GetSystemTimeZones()
   Me.timeZoneList.DataSource = tzCollection
End Sub

Private Sub OkButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OkButton.Click
   Dim selectedTimeZone As TimeZoneInfo = DirectCast(Me.timeZoneList.SelectedItem(), TimeZoneInfo)
   MsgBox("You selected the " & selectedTimeZone.ToString() & " time zone.")
End Sub

最もリスト コントロール (など、System.Windows.Forms.ListBoxまたはSystem.Web.UI.WebControls.BulletedListコントロール) にするオブジェクト変数のコレクションを割り当てるには、そのDataSourceプロパティを実装するコレクションとならない限り、IEnumerableインターフェイスです。Most list controls (such as the System.Windows.Forms.ListBox or System.Web.UI.WebControls.BulletedList control) allow you to assign a collection of object variables to their DataSource property as long as that collection implements the IEnumerable interface. (ジェネリックReadOnlyCollection<T>クラスがこれです)。コレクションでは個々 のオブジェクトを表示するには、このコントロールはそのオブジェクトを呼び出します。ToStringオブジェクトを表すために使用する文字列を抽出するメソッド。(The generic ReadOnlyCollection<T> class does this.) To display an individual object in the collection, the control calls that object's ToString method to extract the string that is used to represent the object. 場合、 TimeZoneInfo 、オブジェクト、ToStringメソッドを返します、TimeZoneInfoオブジェクトの表示名 (の値、DisplayNameプロパティ)。In the case of TimeZoneInfo objects, the ToString method returns the TimeZoneInfo object's display name (the value of its DisplayName property).

注意

リスト コントロールを呼び出すオブジェクトのためToStringメソッドのコレクションを割り当てることができますTimeZoneInfoコントロールにオブジェクトがある各オブジェクトについて、わかりやすい名前を表示し、取得、コントロール、TimeZoneInfoユーザーが選択したオブジェクト。Because list controls call an object's ToString method, you can assign a collection of TimeZoneInfo objects to the control, have the control display a meaningful name for each object, and retrieve the TimeZoneInfo object that the user has selected. コレクション内の各オブジェクトの文字列を抽出、コントロールのさらに割り当てられているコレクションに文字列を割り当てる必要があるDataSourceプロパティは、ユーザーが選択すると、文字列を取得し、この文字列を使用して、オブジェクトを抽出について説明します。This eliminates the need to extract a string for each object in the collection, assign the string to a collection that is in turn assigned to the control's DataSource property, retrieve the string the user has selected, and then use this string to extract the object that it describes.

コードのコンパイルCompiling the code

この例で必要な要素は次のとおりです。This example requires:

  • される System.Core.dll への参照をプロジェクトに追加します。That a reference to System.Core.dll be added to the project.

  • 次の名前空間は、インポートします。That the following namespaces be imported:

    System (c# コード)System (in C# code)

    System.Collections.ObjectModel

関連項目See also

日付、時刻、およびタイム ゾーン する方法: 埋め込みリソースにタイム ゾーンを保存 する方法: 埋め込みリソースからタイム ゾーンを復元Dates, times, and time zones How to: Save time zones to an embedded resource How to: Restore time zones from an embedded resource