Procedura: enumerare i fusi orari presenti in un computerHow to: Enumerate time zones present on a computer

Per poter usare correttamente un determinato fuso orario è necessario che nel sistema siano disponibili le informazioni sul fuso orario.Successfully working with a designated time zone requires that information about that time zone be available to the system. I sistemi operativi Windows XP e Windows Vista archiviare queste informazioni nel Registro di sistema.The Windows XP and Windows Vista operating systems store this information in the registry. Sebbene nel mondo esistano molti fusi orari, le informazioni presenti nel Registro di sistema sono relative solo a una parte di essi.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. Inoltre, il Registro di sistema è una struttura dinamica il cui contenuto è soggetto a modifiche intenzionali e accidentali.In addition, the registry itself is a dynamic structure whose contents are subject to both deliberate and accidental change. Di conseguenza, un'applicazione non può sempre presupporre che un determinato fuso orario sia definito e disponibile in un sistema.As a result, an application cannot always assume that a particular time zone is defined and available on a system. Il primo passaggio per molte applicazioni che si basano sulle informazioni del fuso orario è determinare se i fusi orari richiesti sono disponibili nel sistema locale o offrire all'utente un elenco di fusi orari da selezionare.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. A tale scopo, è necessario che un'applicazione sia in grado di enumerare i fusi orari definiti in un sistema locale.This requires that an application enumerate the time zones defined on a local system.

Nota

Se un'applicazione si basa sulla presenza di un particolare fuso orario non può essere definita in un sistema locale, l'applicazione può garantire la sua presenza da serializzare e deserializzare le informazioni sul fuso orario.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. Il fuso orario possono aggiungere a un controllo elenco in modo che l'utente dell'applicazione è possibile selezionarla.The time zone can then be added to a list control so that the application user can select it. Per informazioni dettagliate, vedere procedura: salvare fusi orari per una risorsa incorporata e procedura: ripristinare fusi orari da una risorsa incorporata.For details, see How to: Save Time Zones to an Embedded Resource and How to: Restore time zones from an embedded resource.

Per enumerare i fusi orari presenti nel sistema localeTo enumerate the time zones present on the local system

  1. Chiamare il metodo TimeZoneInfo.GetSystemTimeZones.Call the TimeZoneInfo.GetSystemTimeZones method. Il metodo restituisce un oggetto generico ReadOnlyCollection<T> insieme di TimeZoneInfo oggetti.The method returns a generic ReadOnlyCollection<T> collection of TimeZoneInfo objects. Le voci nella raccolta vengono ordinate i DisplayName proprietà.The entries in the collection are sorted by their DisplayName property. Ad esempio:For example:

    ReadOnlyCollection<TimeZoneInfo> tzCollection;
    tzCollection = TimeZoneInfo.GetSystemTimeZones();
    
    Dim tzCollection As ReadOnlyCollection(Of TimeZoneInfo) = TimeZoneInfo.GetSystemTimeZones
    
  2. Enumerare i singoli TimeZoneInfo oggetti nella raccolta utilizzando un foreach ciclo (in c#) o un For Each...NextEnumerate the individual TimeZoneInfo objects in the collection by using a foreach loop (in C#) or a For EachNext ciclo (in Visual Basic) ed eseguire tutte le elaborazioni necessarie su ogni oggetto.loop (in Visual Basic), and perform any necessary processing on each object. Ad esempio, il codice seguente enumera il ReadOnlyCollection<T> insieme di TimeZoneInfo degli oggetti restituiti nel passaggio 1 e viene elencato il nome visualizzato di ogni fuso orario nella console.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
    

Per presentare all'utente un elenco di fusi orari presenti nel sistema localeTo present the user with a list of time zones present on the local system

  1. Chiamare il metodo TimeZoneInfo.GetSystemTimeZones.Call the TimeZoneInfo.GetSystemTimeZones method. Il metodo restituisce un oggetto generico ReadOnlyCollection<T> insieme di TimeZoneInfo oggetti.The method returns a generic ReadOnlyCollection<T> collection of TimeZoneInfo objects.

  2. Assegnare la raccolta restituita nel passaggio 1 per il DataSource proprietà di un Windows Form o ASP.NET controllo elenco.Assign the collection returned in step 1 to the DataSource property of a Windows forms or ASP.NET list control.

  3. Recuperare il TimeZoneInfo oggetto che l'utente ha selezionato.Retrieve the TimeZoneInfo object that the user has selected.

Nell'esempio viene illustrato questo concetto per un'applicazione Windows.The example provides an illustration for a Windows application.

EsempioExample

Nell'esempio viene avviata un'applicazione Windows che consente di visualizzare i fusi orari definiti in un sistema in una casella di riepilogo.The example starts a Windows application that displays the time zones defined on a system in a list box. Nell'esempio viene quindi visualizzata una finestra di dialogo che contiene il valore del DisplayName proprietà dell'oggetto fuso orario selezionato dall'utente.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

Più controlli di elenco (ad esempio il System.Windows.Forms.ListBox o System.Web.UI.WebControls.BulletedList controllo) consentono di assegnare una raccolta di variabili oggetto per loro DataSource , purché tale raccolta implementa proprietà il IEnumerable interfaccia.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. (Generico ReadOnlyCollection<T> eseguita dalla classe.) Per visualizzare un singolo oggetto nella raccolta, il controllo chiama tale oggetto ToString metodo per estrarre la stringa utilizzata per rappresentare l'oggetto.(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. In caso di TimeZoneInfo oggetti, il ToString metodo restituisce il TimeZoneInfo nome visualizzato dell'oggetto (il valore della relativa DisplayName proprietà).In the case of TimeZoneInfo objects, the ToString method returns the TimeZoneInfo object's display name (the value of its DisplayName property).

Nota

Poiché i controlli elenco chiamano un oggetto ToString (metodo), è possibile assegnare una raccolta di TimeZoneInfo oggetti per il controllo, che il controllo Visualizza un nome significativo per ogni oggetto e recuperare il TimeZoneInfo oggetto che l'utente ha selezionato.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. Questo elimina la necessità di estrarre una stringa per ogni oggetto nella raccolta, la stringa assegnata a una raccolta che a sua volta viene assegnata al controllo DataSource proprietà, recuperare la stringa di cui l'utente ha selezionato e quindi questa stringa viene utilizzata per estrarre l'oggetto che descrive.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.

Compilazione del codiceCompiling the code

L'esempio presenta i requisiti seguenti:This example requires:

  • Un riferimento a System.Core.dll essere aggiunto al progetto.That a reference to System.Core.dll be added to the project.

  • Che importati spazi dei nomi seguenti:That the following namespaces be imported:

    System (in codice c#)System (in C# code)

    System.Collections.ObjectModel

Vedere ancheSee also

Date, ore e fusi orari procedura: salvare fusi orari per una risorsa incorporata procedura: ripristinare fusi orari da una risorsa incorporataDates, times, and time zones How to: Save time zones to an embedded resource How to: Restore time zones from an embedded resource