Práce s daty a časy je nevyhnutelnou součástí každého vývoje aplikace, která interaguje s uživateli po celém světě. Tento problém je ještě složitější v případě, kdy aplikace musí správně reagovat na různé kulturní nastavení, časová pásma a letní čas (DST). V následujícím textu se zaměříme na klíčové aspekty práce s daty a časy v .NET, včetně lokalizace, manipulace s jednotlivými datovými typy a správného přístupu k časovým zónám.
V .NET je kladeno důraz na správné zpracování dat, což je zřejmé, když se zaměříme na práci s datovými typy, jako je DateTime, DateOnly, TimeOnly a TimeZoneInfo. Každý z těchto typů má své specifické využití a vlastnosti, které je nutné při vývoji aplikací správně využít.
Lokalizace hodnoty DayOfWeek
Jedním z problémů, které mohou při práci s daty nastat, je lokalizace výčtového typu DayOfWeek. Tento výčtový typ je hardcodován v angličtině, což znamená, že názvy dnů týdne jsou vždy zobrazeny v angličtině, a to i v případě, kdy je aplikace určena pro jiný jazyk. Existují však způsoby, jak tuto hodnotu lokalizovat, například pomocí formátovacích řetězců nebo přístupem k metodám třídy DateTimeFormatInfo, které umožňují převést hodnotu DayOfWeek na lokalizovaný řetězec.
Příklad kódu pro lokalizaci dnů týdne v dánštině vypadá takto:
Tento kód nastaví aktuální kulturu na dánštinu a následně vypíše název dne v týdnu v dánském formátu. Výsledek bude například "torsdag", což je dánský název pro čtvrtek.
Práce pouze s datem nebo časem
V .NET 6 byly představeny nové typy, jako DateOnly a TimeOnly, které umožňují pracovat pouze s datem nebo pouze s časem bez zbytečných komplikací. Dříve bylo běžné používat DateTime pro oba tyto účely, ale to vedlo k tomu, že časová složka byla nastavena na 00:00:00, což nebylo ideální.
Typ DateOnly je ideální pro uchování hodnoty pouze data (například pro uložení datumového sloupce v databázi), zatímco TimeOnly se hodí pro uchování času, například pro plánování schůzek nebo otevíracích hodin organizace.
Příklad použití těchto typů pro naplánování korunovace krále Karla III.:
Tento kód ukazuje, jak jednoduše lze kombinovat hodnotu data a času, aby se vytvořil kompletní záznam pro kalendář.
Práce s časovými pásmy
Při plánování událostí nebo práci s daty napříč různými časovými pásmy je důležité vzít v úvahu, že hodnoty jako DateTime a TimeOnly neobsahují informaci o časovém pásmu. To může vést k problémům, pokud je aplikace určena pro uživatele v různých časových pásmech. Nejlepším přístupem je využívat třídu TimeZoneInfo, která umožňuje konvertovat časové hodnoty mezi různými časovými pásmy a také detekovat, zda daný čas spadá do letního času.
Příklad konverze mezi časovými pásmy:
Tento kód ukáže aktuální čas v středoevropském časovém pásmu na základě UTC času.
Práce s letním časem
Letní čas (DST) je v mnoha zemích stále aktuální otázkou. Například ve Spojených státech se v současnosti diskutuje o zrušení letního času nebo o jeho trvalém zavedení, což přináší další komplikace v programování, pokud aplikace musí správně reagovat na změny spojené s přechodem na letní čas.
V rámci aplikací v .NET můžeme využít metodu IsDaylightSavingTime, která nám řekne, zda daný časový okamžik spadá do období letního času:
Výstup ukáže, zda je Vánoce v roce 2023 v období letního času, což závisí na konkrétním časovém pásmu a zemi.
Důležité je také pochopit, že práce s časovými pásmy a letním časem je komplexní a závisí na řadě faktorů, jako jsou místní politická rozhodnutí, geografická poloha a historické změny v legislativě. Kromě technických aspektů je nutné být si vědom kulturních rozdílů při zobrazování dat a času pro různé národy, což se odráží v způsobech, jakými jsou formátovány dny v týdnu, měsíce, a také jak je nastaven začátek a konec dne v konkrétních zemích.
Jak se vypořádat s daty, časy a internacionalizací v aplikacích?
Globalizace a lokalizace jsou klíčové aspekty při vývoji softwaru, který má být přístupný a srozumitelný pro uživatele z různých kultur a jazykových prostředí. Tato témata zahrnují správu dat, časových zón, měn a dalších kulturně specifických prvků, které mohou ovlivnit způsob, jakým uživatelé vnímají a používají aplikace. Přestože se může zdát, že tyto problémy jsou čistě technické, jejich správné řešení je nezbytné pro úspěch produktu na globálním trhu.
Pokud máte aplikaci, která má uživatele z různých zemí, správné formátování dat a časů je zásadní. V mnoha případech se při zobrazení dat musí brát v úvahu nejen jazyk, ale také kulturní zvyklosti týkající se zápisu data a času. Například v angličtině používané ve Spojených státech se datum zapisuje jako měsíc/den/rok (například 03/30/1967), zatímco ve Spojeném království je běžný formát den/měsíc/rok (30/03/1967). To samé platí pro měny, kde dolar ($) je běžným symbolem ve Spojených státech, ale v Británii je to libra (£).
Při vývoji aplikace je důležité používat tzv. kulturální kódy, které určují, jakým způsobem budou hodnoty jako datum, měna nebo číselné hodnoty zobrazeny v závislosti na místním nastavení. Například kód en-GB označuje britskou angličtinu, zatímco en-US se vztahuje na americkou angličtinu. Tyto kódy pomáhají aplikacím správně interpretovat a zobrazovat různé kulturní formáty.
Kromě dat a časů mohou kulturní rozdíly ovlivnit také způsob, jakým se zpracovávají číselné hodnoty. V některých kulturách je pro oddělení tisíců používána čárka (například ve Spojených státech nebo ve Spojeném království), zatímco v jiných je používána tečka (například v mnoha evropských zemích). Také desetinná místa mohou být zapsána odlišně – v některých zemích se používá tečka (např. 3.14), zatímco v jiných se používá čárka (např. 3,14).
Tento typ kulturního přizpůsobení je také důležitý při práci s měnami. Například ve Švédsku se používá koruna (kr), v Polsku zlotý (PLN) a v Iránu rial (IRR). Měna musí být zobrazená správně a aplikace musí být schopná správně převádět částky a zobrazovat je ve správné měně v závislosti na nastavení kultury.
Další aspekt, který je potřeba zohlednit, je orientace textu. Například v jazycích, které se píší zprava doleva, jako je arabština nebo hebrejština, musí aplikace upravit nejen text, ale i celkový layout uživatelského rozhraní, aby bylo možné text číst správně. To zahrnuje přizpůsobení tlačítek, nabídek a dalších prvků tak, aby odpovídaly zvyklostem konkrétního kulturního prostředí.
V některých případech může být potřeba aplikaci přizpůsobit ještě více, například při použití specifických kalendářů. V Íránu se například používá perský kalendář, ve kterém je aktuální rok 1400, a zápis data je ve formátu rok/měsíc/den (například 1400/1/11). Při práci s takovými specifickými kalendáři je třeba mít na paměti, že standardní řešení pro data, která se používají v evropských nebo amerických kalendářích, nebudou fungovat správně.
Když aplikace potřebuje fungovat v různých kulturních prostředích, může být užitečné použít tzv. invariantní kulturu. Tento koncept je užitečný, když potřebujete dočasně ignorovat aktuální lokalizační nastavení a používat standardní formátování, například při generování dokumentů nebo při odesílání dat mezi systémy. Invariantní kultura je většinou založena na americké angličtině, což znamená, že čísla a měny budou formátovány podle amerických zvyklostí (například čísla se zobrazují s tečkou jako oddělovačem tisíců a čárkou pro desetinná místa).
Pokud například generujete JSON dokument, který obsahuje číslo s dvěma desetinnými místy, a potřebujete zajistit, že číslo bude správně zpracováno ve všech kulturách, můžete použít invariantní kulturu. To znamená, že číslo bude vždy formátováno správně, bez ohledu na regionální nastavení počítače, na kterém se aplikace spustí.
Pro lokalizaci uživatelského rozhraní je nezbytné použít tzv. satelitní sestavení, která obsahují lokalizované texty a jiné prostředky pro konkrétní jazyk. Tyto soubory se obvykle ukládají v XML formátu s příponou .resx a zahrnují jazykový kód, například PacktResources.en-GB.resx pro britskou angličtinu nebo PacktResources.da-DK.resx pro dánštinu. Aplikace nejprve hledá texty v souborech specifických pro daný jazyk, pokud je nenajde, přejde na soubor s neutrálními texty a nakonec na výchozí invariantní kulturu.
Je nezbytné věnovat pozornost nejen technickým detailům, ale také kulturním zvyklostem a preferencím, které ovlivňují chování aplikace. Globalizace a lokalizace nejsou pouze otázkou technického přizpůsobení, ale i porozumění tomu, jak různé kultury vnímají svět a jak se vyrovnávají s každodenními úkoly, jako je práce s daty, časem a měnami.
Jak 2D chalcogenidové materiály mohou zlepšit účinnost fotovoltaických zařízení
Jak přežít v neúprosném světě lovu a pronásledování
Jak využít Laplaceovu transformaci pro analýzu frakcionálních systémů Genesio-Tesi?

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский