Sdílet prostřednictvím


Postupy: Výčet časových pásem přednastavených v počítači

Úspěšná práce s určeným časovým pásmem vyžaduje, aby měl systém informace o daném časovém pásmu. V operačních systémech Windows XP a Windows Vista jsou tyto informace uloženy v registrech. Avšak celkový počet časových pásem, která existují po celém světě je velký. Registr proto obsahuje informace pouze o jejich podmnožině. Kromě toho je registr dynamická struktura, jejíž obsah se může měnit jak záměrnými, tak náhodnými změnami. V důsledku toho aplikace nemůe vždy předpokládat, že určité časové pásmo je definované a je k dispozici v systému. Prvním krokem pro mnoho aplikací, které používají informace o časovém pásmu je určit, zda jsou požadovaná časová pásma k dispozici v místním systému nebo nabídnout uživateli seznam s časovými pásmy, ze kterých si může vybrat. To vyžaduje, aby aplikace poskytla výčet časových pásem definovaných v místním systému.

PoznámkaPoznámka

Pokud aplikace spoléhá na přítomnost konkrétního časového pásma, které nemusí být definováno v místním systému, aplikace se může ujistit o jeho dostupnosti serializací a deserializací informací o časovém pásmu.Časové pásmo lze poté přidat do seznamu, aby jej mohl uživatel aplikace vybrat.Další informace naleznete v tématech Postupy: Uložit časová pásma do integrovaného prostředku a Postupy: Obnovení časových pásem z integrovaného zdroje.

Pro sestavení výčtu časových pásem v místním systému

  1. Volejte metodu TimeZoneInfo.GetSystemTimeZones. Metoda vrátí obecnou kolekci ReadOnlyCollection<T> objektů TimeZoneInfo. Položky v kolekci jsou seřazeny podle jejich vlastnosti DisplayName. Příklad:

    Dim tzCollection As ReadOnlyCollection(Of TimeZoneInfo) = TimeZoneInfo.GetSystemTimeZones
    
    ReadOnlyCollection<TimeZoneInfo> tzCollection;
    tzCollection = TimeZoneInfo.GetSystemTimeZones();
    
  2. Proveďte výčet jednotlivých objektů TimeZoneInfo v kolekci pomocí smyčky foreach (v jazyce C#) nebo For Each…Next smyčky (v jazyce Visual Basic) a proveďte jakékoli nezbytné zpracování pro každý objekt. Například následující kód vytvoří výčet kolekce ReadOnlyCollection<T> objektů TimeZoneInfo vrácených v kroku 1 a vypíše zobrazovaný název každého časového pásma do konzoly.

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

Předložení seznamu časových pásem v místním systému uživateli

  1. Volejte metodu TimeZoneInfo.GetSystemTimeZones. Metoda vrátí obecnou kolekci ReadOnlyCollection<T> objektů TimeZoneInfo.

  2. Přiřaďte kolekci vrácenou v kroku 1 vlastnosti DataSource formulářů Windows nebo ovládacímu prvku seznamu technologie ASP.NET.

  3. Načtěte objekt TimeZoneInfo, který uživatel vybral.

Příklad obsahuje ukázku pro aplikaci systému Windows.

Příklad

V příkladu se spustí aplikace systému Windows, která zobrazí časová pásma definovaná v systému do seznamu. V příkladu se potom zobrazí dialogové okno, které obsahuje hodnotu vlastnosti DisplayName objektu časového pásma vybraného uživatelem.

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
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.");
}

Většina ovládacích prvků seznamů (například ovládací prvky System.Windows.Forms.ListBox nebo System.Web.UI.WebControls.BulletedList) umožňují přiřadit kolekci proměnných od objektů jejich vlastnostem DataSource, po dobu kdy kolekce implementuje rozhraní IEnumerable. (Toto provádí obecná třída ReadOnlyCollection<T>.) Pro zobrazení jednotlivých objektů v kolekci, ovládací prvek volá metodu ToString tohoto objektu pro extrahování řetězce, který se používá k reprezentaci objektu. Pokud se jedná o objekty TimeZoneInfo, metoda ToString vrátí zobrazovaný název objektu TimeZoneInfo (hodnotu jeho vlastnosti DisplayName).

PoznámkaPoznámka

Protože ovládací prvky seznamu volají metodu objektu ToString, můžete přiřadit kolekci objektů TimeZoneInfo k ovládacímu prvku, použít ovládací prvek pro zobrazení smysluplného názvu pro každý objekt a načíst objekt TimeZoneInfo, který uživatel vybral. To eliminuje potřebu extrahovat řetězec pro každý objekt v kolekci. Přiřaďte řetězec do kolekce, která je přiřazena vlastnosti DataSource ovládacího prvku, načtěte řetězec, který uživatel vybral a potom použijte tento řetězec pro extrahování objektu, který ji popisuje.

Probíhá kompilace kódu

Tento příklad vyžaduje:

Viz také

Úkoly

Postupy: Uložit časová pásma do integrovaného prostředku

Postupy: Obnovení časových pásem z integrovaného zdroje

Další zdroje

Data, časy a časových pásem