Úvod do časových pásem a letního času

1. díl - Úvod do časových pásem a letního času

Tomáš Jecha, MVP, MCSD       22.06.2012       C#, VB.NET, .NET       19959 zobrazení

Ve článku se snažím popsat úskalí, která přináší konverze času přes více časových pásem a pravidel pro počítání letního času.

.NET Framework nabízí třídy, které nám práci s datem a časem v různých časových pásmech maximálně ulehčí. Zároveň minimalizuje nutné znalosti o pásmech v případě, že nás nezajímají, což může být většina psaných aplikací.

Než se pustím do popisu tříd v .NET a typů v SQL Serveru a jejich použití, věnuji tento první díl nutné teorii. Ačkoliv většina z vás bude následující odstavce již znát, pro úplnost vše zopakuji.

Časová pásma

Svět je rozdělený do různých oblastí podle časového pásma (anglicky time zone). Například Česká Republika společně s řadou dalších zemí (Maďarsko, Slovensko, Německo, Polsko, Francie, Řecko…) spadá do pásma UTC+1. Toto označení znamená, že čas je zde o jednu hodinu větší, než čas UTC – Coordinated Universal Time. Označení UTC bývá často zaměňováno s jeho méně přesným předchůdcem GMT (Greenwitch Mean Time, pojmenované podle observatoře v městě Greenwitch). Občas se také UTC označuje jako zulu time, což vychází ze zástupného slova “zulu” pro písmeno “z” ve slově ”zero” (angl. nula) a znamená časové pásmo s odchylkou 0 hodin (UTC+0).

Na rozdíl od České Republiky existuje nemalá řada zemí, které na svém území nespadají jen do jednoho časového pásma. Příkladem může být USA s rozsahem UTC-5UTC-10. Z toho důvodu nelze jednoznačně říct, která země spadá do kterého časového pásma. Což je také jeden z důvodů, proč v .NET jazycích není možnost, jak získat z kultury (třída CultureInfo) časové pásmo.

Také se můžete setkat s několika málo oblastmi, které nemají posun oproti UTC v celých hodinách. Příkladem jest Austrálie ležící v pásmech UTC+8, UTC+9:30 a UTC+10.

Letní čas

Celý doposud jednoduchý model výrazně komplikuje letní čas - anglicky summer time, či obecnější daylight saving time neboli DST. Jeho smyslem je oddálit stmívání proti času na hodinách dočasným posunutím ručiček o hodinu vpřed. Díky tomu se na území České Republiky dostáváme na určitou část roku, po kterou je platný letní čas, z pásma UTC+1 do pásma UTC+2.

Prvním problémem je fakt, že ne všechny oblasti letní čas používají. Pokud budete tedy chtít vědět, jaký je čas v jiné zemi, nestačí vám znát pouze naše a jejich časové pásmo, ale také informace o letním čase.

Druhým ještě zásadnějším problémem je rozsah platnosti letního času. V každé oblasti využívající letní čas totiž může začínat a končit v jinou hodinu a den. Představte si například data 5. března, 15. března a 28 března. Dne 5. března není ani u nás, ani v USA letní čas a rozdíl hodin mezi námi (UTC+1) a USA (UTC-7) je celkem 8 hodin. V polovině měsíce u nás stále letní čas nezačal, kdežto v USA už ano (UTC-7 → UTC-6) a rozdíl se tak sníží na 7 hodin. Teprve až ke konci měsíce přecházíme na letní čas i my (UTC+1 → UTC+2) a rozdíl se opět zvyšuje na původních 8 hodin.

Tyto komplikace mohou způsobit řadu nedorozumění a proto se často při komunikaci mezi lidmi i počítačovými systémy v různých pásmech používá univerzální čas UTC, do kterého zkonvertuje svůj lokální čas ve specifické oblasti příslušného systému a informaci uloží nebo zašle dále již v tomto formátu.

Nastavení pásma v systému

Nastavení pásma a oblasti vybíráte běžně při instalaci systému a následně jej můžeme změnit v nastavení data a času za běhu systému. Nastavení je rozděleno podle oblastí se stejným pásmem a stejnými pravidly pro letní čas. Tyto oblasti se obvykle označují názvem města, což je pro Českou Republiku pochopitelně Praha. Na následujícím obrázku je panel pro nastavení data a času v systému Windows.

image

 

hodnocení článku

2 bodů / 2 hlasů       Hodnotit mohou jen registrované uživatelé.

 

Všechny díly tohoto seriálu

3. DateTimeOffset v .NET Frameworku 26.06.2012
2. DateTime v .NET Frameworku 24.06.2012
1. Úvod do časových pásem a letního času 22.06.2012

 

 

 

Nový příspěvek

 

Diskuse: Datum a čas globálních aplikací

Kedysi som do jednej aplikácie chcel zapracovať letný čas u nás (Slovensko). Pred rokmi sa u nás letný čas končil posledný septembrový víkend (září) a v týchto rokoch je to posledný októbrový víkend (říjen). K zmene došlo okolo roku 1995 +- 2 roky (už si to presne nepamätám. NET mi ale stále vnucoval koniec letného času v októbri (říjen). Takže najlepšie je sa na NET nespoliehať, nakoľko údaje ním "dodávané" nemusia odzrkadľovať realitu.

Som zvedavý, čo mi na to povie autor. Preto ešte doplním, že sa jedná o NET 3.5 vo VSE 2008. V novších verziách tento bug môže byť opravený. Osobne si myslím, že spoliehať sa na presnosť údajov v NET ohľadne letného času sa môže akurát Amerika, ale Slovensko by si na letný čas v NET malo dať veľký pozor.

Nakoľko tu nie je kolonka na meno, tak meno je msx.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Jak jsem psal, letní čas má celou řadu nejrůznějších pravidel specifických pro různé oblasti a je tedy možné, že ve starších verzích .NET Frameworku se problém vyskytnul. Pokud je problém přejít na vyšší verzi, použijte třídu definice časového pásma TimeZoneInfo, nadefinujte svoji zónu korektně a používejte ji k získávání času.

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

Diskuse: Datum a čas globálních aplikací

Když už si dáváte práci s článkem/seriálem, tak bych v tomto prvním dílu doporučil rozlišit GMT a UTC, což nejsou ekvivalentní pojmy! Viz např. http://www.root.cz/clanky/synchronizace-... a http://www.chronomag.cz/clanek/2011-12-0...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Dobrý den, děkuji za upřesnění. Ve článku tuto nesrovnalost zohledním.

Důvodem, proč je pokládám za prakticky totožné je to, že ačkoliv GMT a UTC jsou získávány jiným způsobem, představovat by měli tu samou hodnotu - aktuální čas.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Ještě bych upozornil na malinkou drobnost, je to v podstatě prkotina, ale hodí se to vědět -

V Britské a všech ostatních verzích Angličtiny(kromě Americké) se používá Summer Time.

V Americké se pak používá Daylight Saving Time.

Je to opravdu jenom taková drobnost, ale možná se to hodí vědět.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.

Nyní zakládáte pod článkem nové diskusní vlákno.
Pokud chcete reagovat na jiný příspěvek, klikněte na tlačítko "Odpovědět" u některého diskusního příspěvku.

Nyní odpovídáte na příspěvek pod článkem. Nebo chcete raději založit nové vlákno?

 

  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback