Sdílet prostřednictvím


Přehled časových pásem

Třída TimeZoneInfo zjednodušuje vytváření aplikací, které berou ohled na časová pásma. Třída TimeZone podporuje práci s místním časovým pásmem a koordinovaným světovým časem (UTC). Třída TimeZoneInfo podporuje obě tyto zóny, stejně tak i všechny časová pásma, o kterých jsou definovány informace v registrech. Můžete také použít TimeZoneInfo, chcete-li definovat vlastní časové pásmo, o kterém systém neobsahuje žádné informace.

Základy časových pásem

Časové pásmo je zeměpisná oblast, ve které se používá stejný čas. Obvykle, ale ne vždy, jsou sousední časová pásma jednu hodinu od sebe. Čas ve všech časových pásmech na světě lze vyjádřit jako posun od koordinovaného světového času (UTC).

Mnoho časových pásem na světě podporuje letní čas. Letní čas se pokouší maximalizovat hodiny denního světla uplatňování změny času o hodinu dopředu v létě nebo na začátku léta a návratu do normálního (nebo standardního) času na konci léta nebo na podzim. Tyto změny na a ze standardního času se označují jako pravidla úpravy.

Přechod z a na letní čas v určitém časovém pásmu lze definovat buď pevným nebo plovoucím pravidlem úpravy. Pevné pravidlo úpravy nastaví určitý datum, kdy dojde k přechodu z nebo na letní čas. Tento datum je stejný pro každý rok. Například přechod z letního času na standardní čas, který nastane každý rok 25. října řeší pevné pravidlo úpravy. Více běžné jsou plovoucí pravidla úpravy, které nastaví určitý den určitého týdne v určitém měsíci pro přechod z nebo na letní čas. Například přechod ze standardního času na letní čas, ke kterému dojde ve třetí neděli v březnu řeší plovoucí pravidlo úpravy.

Pro časová pásma podporující pravidla úpravy, přechod z a na letní čas a vytvoří 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. Například pokud k tomuto přechodu dochází v určitý den ve 2:00 dop. a způsbí změnu času na 3:00 dop., každý časový interval mezi 2:00 dop. 2:59:99 dop. je neplatný. Nejednoznačný čas je čas, které lze namapovat na dva různé časy v jediném časovém pásmu. Je vytvořen přechodem z letního času na standardní čas. Například pokud k tomuto přechodu dochází v určitý den ve 2:00 dop. a způsbí změnu času na 1:00 dop., každý časový interval mezi 1:00 dop. 1:59:99 dop. lze interpretovat jako standardní čas nebo letní čas.

Terminologie časových pásem

V následující tabulce jsou definovány termíny běžně používané při práci s časovými pásmy a při vývoji aplikací, které zohledňují časová pásma.

Termín

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 definující, kdy je pravidlo platné (například pravidlo úpravy je platné od 1. ledna 1986 do 31. prosince 2006), rozdíl (doba, ve které se standardní čas změní v důsledku aplikace pravidla úpravy) a informaci o konkrétním datu a čase, ve kterém dojde k posunu v daném období. Přechody se mohou řídit buď pevným nebo plovoucím pravidlem.

Nejednoznačný čas

Čas, který lze namapovat na dva různé časy v jediném časovém pásmu. K tomu dojde, když je čas se upraven směrem zpět, například při přechodu z letního času na standardní čas. Například pokud k tomuto přechodu dochází v určitý den ve 2:00 dop. a způsbí změnu času na 1:00 dop., každý časový interval mezi 1:00 dop. 1:59:99 dop. lze interpretovat jako standardní čas nebo letní čas.

Pevná pravidla

Pravidlo úpravy, které nastaví konkrétní datum pro přechod z nebo na letní čas. Například přechod z letního času na standardní čas, který nastane každý rok 25. října řeší pevné pravidlo úpravy.

Plovoucí pravidlo

Pravidlo úpravy, které nastaví určitý den určitého týdne v určitém měsíci pro přechod z nebo na letní čas. Například přechod ze standardního času na letní času, ke kterému dojde ve třetí neděli v březnu řeší plovoucí pravidlo úpravy.

Neplatný čas

Neexistující čas, který je artefaktem přechodu ze standardního času na letní čas. K tomu dojde, když je čas se upraven směrem dopředu, například při přechodu ze standardního času na letní čas. Například pokud k tomuto přechodu dochází v určitý den ve 2:00 dop. a způsbí změnu času na 3:00 dop., každý časový interval mezi 2:00 dop. 2:59:99 dop. je neplatný.

Čas přechodu

Informace o určité změně času, jako je například změna z letního času na standardní čas nebo naopak v určitém časovém pásmu.

Třída TimeZoneInfo a časová pásma

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

Rozhraní .NET Framework spoléhá na informace o časovém pásmu poskytované operačním systémem a uložené v registru. Z důvodu počtu existujících časových pásem nejsou všechny existující časová pásma reprezentována v registrech. Navíc vzhledem k tomu, že registry jsou dynamickou strukturou, předdefinovaná časová pásma z nich mohou být přidána či odebrána. Registry tedy nutně neobsahují historická data o časových pásmech. Například v systému Windows XP registry obsahují data o pouze jedné sadě úprav časových pásem. Systém Windows Vista podporuje dynamická data o časových pásmech, což znamená, že jediné časové pásmo může mít více pravidel úpravy, které se vztahují na určité intervaly roků. Avšak většina časových pásem, která jsou definována v systému Windows Vista a podporují letní čas mají pouze jedno nebo dvě předdefinovaná pravidla úpravy.

Závislost třídy TimeZoneInfo na registrech znamená, že aplikace, která zohledňuje časová pásma si nemůže být jista, že určité časové pásmo je definováno v registrech. Ve výsledku by pokus o vytvoření instance určitého časového pásma (jiného než místní časové pásmo nebo časové pásmo, které představuje čas UTC) měl používat zpracování výjimek. Mělo by se také poskytnout některé metody, které umožní aplikaci pokračovat, pokud nelze vytvořit instanci požadovaného objektu TimeZoneInfo z registrů.

Pro zpracování chybějícího požadovaného časového pásma třída TimeZoneInfo obsahuje metodu CreateCustomTimeZone, kterou lze použít pro vytvoření vlastního časového pásma, které není nalezeno v registrech. Podrobné informace o vytváření vlastního časového pásma naleznete 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 použít metodu ToSerializedString pro převedení nově vytvořeného časového pásma na řetězec a uložit jej v datovém úložišti (například databáze, textový soubor, registr nebo prostředek aplikace). Potom můžete použít metodu FromSerializedString pro převedení tohoto řetězce zpět na objekt TimeZoneInfo. 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.

Protože každé časové pásmo je charakterizováno základním posunem od času UTC, stejně jako posunem od času UTC, který odráží platná pravidla úpravy, čas v jednom časovém pásmu lze snadno převést na čas v jiném časovém pásmu. Za tímto účelem objekt TimeZoneInfo obsahuje několik metod pro převod, včetně:

  • ConvertTimeFromUtc, která převede čas UTC na čas v požadovaném časovém pásmu.

  • ConvertTimeToUtc, která převede čas v požadovaném časovém pásmu na čas UTC.

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

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

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

Viz také

Další zdroje

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