Přehled časových pásem

Třída TimeZoneInfo zjednodušuje vytváření aplikací pracujících s časovým pásmem. Třída TimeZone podporuje práci s místním časovým pásmem a koordinovaným univerzálním časem (UTC). Třída TimeZoneInfo podporuje obě tyto zóny i jakékoli časové pásmo o tom, které informace jsou předdefinovány v registru. Můžete také použít TimeZoneInfo k definování vlastních časových pásem, o které systém nemá žádné informace.

Základy časových pásem

Časové pásmo je geografická oblast, ve které se používá stejný čas. Obvykle, ale ne vždy, sousední časová pásma jsou od sebe jedna hodina. Čas v libovolném světovém časovém pásmu lze vyjádřit jako posun od koordinovaného univerzálního času (UTC).

Mnoho světových časových pásem podporuje letní čas. Letní čas se snaží maximalizovat denní čas tím, že posune čas dopředu o jednu hodinu na jaře nebo v raném létě a vrátí se k normálnímu (nebo standardnímu) času v pozdním létě nebo podzimu. Tyto změny standardního času se označují jako pravidla úprav.

Přechod do a z letního času v určitém časovém pásmu může být definován pevným nebo plovoucím pravidlem úpravy. Pevné pravidlo úpravy nastavuje konkrétní datum, kdy se přechod na letní čas nebo z letního času vyskytuje každý rok. Například přechod z letního času na standardní čas, ke kterému dochází každý rok 25, se řídí pevným pravidlem úpravy. Mnohem častější jsou pravidla plovoucí úpravy, která pro přechod na letní čas nebo z letního času nastavují konkrétní den konkrétního týdne konkrétního měsíce. Například přechod ze standardního času na letní čas, který nastane třetí neděli v březnu, se řídí plovoucím pravidlem úpravy.

Pro časová pásma, která podporují pravidla úprav, vytvoří přechod na letní čas a z letního času dva druhy neobvyklých časů: neplatné časy a nejednoznačné časy. Neplatný čas je neexistující čas vytvořený přechodem ze standardního času na letní čas. Pokud například k tomuto přechodu dojde v určitém dni v 2:00 a způsobí, že čas se změní na 3:00, je každý časový interval mezi 2:00 a 2:59:59 a M. neplatný. Nejednoznačný čas je čas, který lze mapovat na dva různé časy v jednom časovém pásmu. Vytvoří se přechodem z letního času na standardní čas. Pokud se například tento přechod vyskytuje v určitém dni v 2:00 a způsobí, že se čas změní na 1:00,00, může být každý časový interval mezi 1:00 a 1:59:59.09 interpretován jako standardní čas nebo letní čas.

Terminologie časového pásma

Následující tabulka definuje termíny, které se běžně používají při práci s časovými pásmy a vývoji aplikací pracujících s časovým pásmem.

Pojem definice
Pravidlo úpravy Pravidlo, které definuje, kdy dojde k přechodu ze standardního času na letní čas a zpět z letního času na standardní čas. Každé pravidlo úpravy má počáteční a koncové datum, které definuje, kdy se pravidlo používá (například pravidlo úpravy se používá od 1. ledna 1986 do 31. prosince 2006), rozdíl (doba, po kterou se standardní čas mění v důsledku použití pravidla úpravy) a informace o konkrétním datu a čase, ke kterému mají přechody během období úpravy dojít. Přechody můžou následovat buď za pevným pravidlem, nebo plovoucím pravidlem.
Nejednoznačný čas Čas, který lze namapovat na dva různé časy v jednom časovém pásmu. Dochází k tomu, když se hodinový čas upraví zpět v čase, například při přechodu z letního času časového pásma na standardní čas. Pokud se například tento přechod vyskytuje v určitém dni v 2:00 a způsobí, že se čas změní na 1:00,00, může být každý časový interval mezi 1:00 a 1:59:59.09 interpretován jako standardní čas nebo letní čas.
Opravené pravidlo Pravidlo úpravy, které nastaví konkrétní datum přechodu na letní čas nebo z letního času. Například přechod z letního času na standardní čas, ke kterému dochází každý rok 25, se řídí pevným pravidlem úpravy.
Plovoucí pravidlo Pravidlo úpravy, které nastaví konkrétní den konkrétního týdne konkrétního měsíce pro přechod na letní čas nebo z letního času. Například přechod ze standardního času na letní čas, který nastane třetí neděli v březnu, se řídí plovoucím pravidlem úpravy.
Neplatný čas Neexistující čas, který je artefaktem přechodu ze standardního času na letní čas. Nastane, když se hodinový čas upraví dopředu v čase, například při přechodu ze standardního času časového pásma na letní čas. Pokud například k tomuto přechodu dojde v určitém dni v 2:00 a způsobí, že čas se změní na 3:00, je každý časový interval mezi 2:00 a 2:59:59 a M. neplatný.
Čas přechodu Informace o určité změně času, například o změně z letního času na standardní čas nebo naopak, v konkrétním časovém pásmu.

Časová pásma a třída TimeZoneInfo

V .NET TimeZoneInfo objekt představuje časové pásmo. Třída TimeZoneInfo obsahuje metodu GetAdjustmentRules , která vrací pole TimeZoneInfo.AdjustmentRule objektů. Každý prvek tohoto pole poskytuje informace o přechodu na a z letního času pro určité časové období. (Pro časová pásma, která nepodporují letní čas, vrátí metoda prázdné pole.) Každý TimeZoneInfo.AdjustmentRule objekt má a DaylightTransitionStartDaylightTransitionEnd vlastnost, která definuje konkrétní datum a čas přechodu na a z letního času. Tato IsFixedDateRule vlastnost označuje, zda je přechod pevný nebo plovoucí.

.NET spoléhá na informace o časovém pásmu poskytované operačním systémem Windows a uložené v registru. Vzhledem k počtu časových pásem země se v registru nezobrazují všechna existující časová pásma. Vzhledem k tomu, že registr je dynamická struktura, je možné do ní přidat nebo odebrat předdefinovaná časová pásma. Registr navíc nemusí nutně obsahovat historická data časového pásma. Například v systému Windows XP registr obsahuje data pouze o jedné sadě úprav časového pásma. Systém Windows Vista podporuje dynamická data časového pásma, což znamená, že jedno časové pásmo může mít více pravidel úprav, která se vztahují na konkrétní intervaly let. Většina časových pásem, která jsou definována v registru Systému Windows Vista a podporují letní čas, však mají pouze jedno nebo dvě předdefinovaná pravidla úprav.

Závislost TimeZoneInfo třídy na registru znamená, že aplikace pracující s časovým pásmem nemůže být jistá, že je v registru definováno konkrétní časové pásmo. V důsledku toho by pokus o vytvoření instance určitého časového pásma (jiného než místního časového pásma nebo časového pásma, které představuje UTC), měl použít zpracování výjimek. Měla by také poskytnout určitou metodu, jak umožnit aplikaci pokračovat, pokud nelze vytvořit instanci požadovaného TimeZoneInfo objektu z registru.

Pro zpracování nepřítomnosti požadovaného časového pásma TimeZoneInfo třída obsahuje metodu CreateCustomTimeZone , kterou můžete použít k vytvoření vlastních časových pásem, která nejsou v registru nalezena. Podrobnosti o vytváření vlastního časového pásma najdete v tématu Postupy: Vytváření časových pásem bez pravidel úprav a postupy: Vytváření časových pásem s pravidly úprav. Kromě toho můžete pomocí ToSerializedString metody převést nově vytvořené časové pásmo na řetězec a uložit ho do úložiště dat (například do databáze, textového souboru, registru nebo prostředku aplikace). Tuto metodu pak můžete použít k převodu FromSerializedString tohoto řetězce zpět na TimeZoneInfo objekt. Podrobnosti najdete v tématu Postupy: Úspora časových pásem do vloženého prostředku a postupy: Obnovení časových pásem z vloženého prostředku.

Vzhledem k tomu, že každé časové pásmo je charakterizováno základním posunem od standardu UTC a posunem od času UTC, který odráží všechna existující pravidla úpravy, lze čas v jednom časovém pásmu snadno převést na čas v jiném časovém pásmu. Pro tento účel objekt obsahuje několik metod převodu TimeZoneInfo , včetně:

  • ConvertTimeFromUtc, který převede utc na čas v určeném časovém pásmu.

  • ConvertTimeToUtc, který převede čas v určeném časovém pásmu na UTC.

  • ConvertTime, který převede čas v jednom určeném časovém pásmu na čas v jiném určeném časovém pásmu.

  • ConvertTimeBySystemTimeZoneId, který používá identifikátory časového pásma (místo TimeZoneInfo objektů) jako parametry k převodu času v jednom určeném časovém pásmu na čas v jiném určeném časovém pásmu.

Podrobnosti o převodu časů mezi časovými pásmy najdete v tématu Převod časů mezi časovými pásmy.

Viz také