Jak na formát data a času v ASP.NET
Jistě jste se už dostali do situace, kdy jste potřebovali mít datum a čas naformátovaný přesně podle svých potřeb a nikoliv podle toho, jak je nastaven formát data a času na serveru, kde ASP.NET aplikace běží. V následujícím článku se pokusím vám problematiku přiblížit a nasměrovat vás k možnému řešení.
Je tomu již několik let, co na Intervalu vyšel seriál článků „Jak na datum a čas nejenom v ASP“ (viz níže). Tímto článkem bych chtěl na tento seriál volně navázat a popsat možnosti práce s datem a časem v ASP.NET. Jistě si vzpomenete, co dalo práce v ASP naformátovat datum a čas do řetězce, který by nám vyhovoval. V ASP.NET je situace poněkud odlišná a dovolím si říci, že i jednodušší.
Struktura DateTime, obsažená ve jmenném prostoru System, má sice řadu metod pro konverzi data a času na řetězec (o všech si můžete přečíst v MSDN), my se dnes ale zaměříme na metodu jedinou, a to na ToString. Tato metoda umožňuje pomocí formátovacích znaků, které si následně popíšeme, velice jednoduše naformátovat výstup data a času.
DateTime datumcas=DateTime.Now;
string string_datumcas;
string_datumcas=datumcas.ToString(„d“);
Standardně jsou definovány jednoznakové formátovací vzory, Ve vzorech se rozlišují malá a velká písmena a tudíž „d“ a „D“ jsou zcela rozdílné vzorky. Ovšem než složitě popisovat, co který vzorek dělá, rozhodl jsem se připravit tabulku, kde bude uveden formátovací vzorek a výsledek formátování.
Vzorek | Výsledek česky | Výsledek anglicky | Popis |
---|---|---|---|
d | 17.12.2003 | 12/17/2003 | krátký formát data |
D | 17. prosince 2003 | Wednesday, December 17, 2003 | dlouhý formát data |
f | 17. prosince 2003 17:42 | Wednesday, December 17, 2003 5:42 PM | dlouhý formát data s krátkým formátem času |
F | 17. prosince 2003 17:42:22 | Wednesday, December 17, 2003 5:42:22 PM | dlouhý formát data s dlouhý formátem času |
g | 17.12.2003 17:42 | 12/17/2003 9:32 PM | krátký formát data s krátkým formátem času |
G | 17.12.2003 17:42:22 | 12/17/2003 9:32:51 PM | krátký formát data s dlouhým formátem času |
m, M | 17 prosince | December 17 | den a měsíc |
r, R | Wed, 17 Dec 2003 17:42:22 GMT | Wed, 17 Dec 2003 17:42:22 GMT | formát podle RFC1123 |
s | 2003-12-17T17:42:22 | 2003-12-17T17:42:22 | tříditelný formát založený na ISO 8601 |
t | 17:42 | 5:42 PM | krátký formát času |
T | 17:42:22 | 5:42:22 PM | dlouhý formát času |
u | 2003-12-17 17:42:22Z | 2003-12-17 17:42:22Z | univezální tříditelný formát data |
U | 17. prosince 2003 16:42:22 | Wednesday, December 17, 2003 4:42:22 PM | plné datum a čas |
y, Y | prosinec 2003 | December, 2003 | měsíc a rok |
Jak v tabulce zřetelně vidíte, několik formátů odporuje pravidlům českého pravopisu, nedostatkem je například absence mezery po tečce za číslem dne nebo absence tečky po číslu dne.
Záhy přitom zjistíte, že způsob zobrazení data a času je závislý na nastavení serveru, aplikace nebo stránky. Co však dělat, pokud potřebujeme mít v jedné stránce zobrazen datum a čas podle více národních zvyklostí? Musíme použít třídu CultureInfo ze jmenného prostoru System.Globalization, která nese informace o národních zvyklostech. Stačí při konverzi předat metodě ToString jako volitelný parametr odkaz na informaci o kultuře, která má být použita.
Informace o národním prostředí použijeme přímo v kódu například takto…
CultureInfo cesky = new CultureInfo( „cs-CZ“); DateTime datumcas=DateTime.Now;
string string_datumcas;
string_datumcas=datumcas.ToString(„d“,cesky);
…nebo takto (přičemž obě varianty jsou identické):
CultureInfo cesky = new CultureInfo( „0x0405“); DateTime datumcas=DateTime.Now;
string string_datumcas;
string_datumcas=datumcas.ToString(„d“,cesky);
Nebudu zde uvádět kompletní výčet nastavení kultur, ale omezím se pouze na pár, které dle mého názoru nejčastěji použijete. Kompletní seznam kultur najdete samozřejmě v MSDN.
Culture Name | Culture Identifier | Jazyk-stát/region |
---|---|---|
cs | 0x0005 | Čeština |
cs-CZ | 0x0405 | Čeština – Česká republika |
en | 0x0009 | Angličtina |
en-GB | 0x0809 | Angličtina – Velká Británie |
en-US | 0x0409 | Angličtina – Spojené státy americké |
sk | 0x001B | Slovenština |
sk-SK | 0x041B | Slovenština – Slovenská republika |
Standardní předdefinované formáty data a času jsou sice krásná věc, ale zcela určitě bude chtít mnoho z vás naformátovat datum a čas odlišným způsobem. Existují proto vzorové sekvence, sestavené ze znaků uvedených ve výše popsané tabulce:
Vzorek | Výsledek | Komentář |
---|---|---|
d | 4 | číslo dne |
dd | 04 | číslo dne (pokud je menší než 10, je s nulou na počátku) |
ddd | pá | zkratka názvu dne |
dddd | pátek | název dne |
M | 7/td> | číslo měsíce |
MM | 07 | číslo měsíce (pokud je menší než 10, je s nulou na počátku) |
MMM | VII | název měsíce (zkratka, ale v některých národních nastaveních římské číslo) |
MMMM | červenec | název měsíce |
y | 3 | letopočet |
yy | 03 | letopočet |
yyyy | 2003 | letopočet |
gg | n.l. | označení éry |
h | 5 | hodiny (12 hodinový formát) |
hh | 5 | hodiny (12 hodinový formát) |
H | 16 | hodiny (24 hodinový formát) |
HH | 16 | hodiny (24 hodinový formát) |
m | 5 | minuty |
mm | 05 | minuty |
s | 3 | sekundy |
ss | 03 | sekundy |
f | 0 | tisíciny sekundy na 1 místo |
ff | 04 | tisíciny sekundy na 2 místa |
fff | 044 | tisíciny sekundy na 2 místa |
ffff | 0440 | tisíciny sekundy na 2 místa |
fffff | 04400 | tisíciny sekundy na 2 místa |
ffffff | 04000 | tisíciny sekundy na 2 místa |
fffffff | 040000 | tisíciny sekundy na 2 místa |
t | o | rozlišení dopoledne a odpoledne |
tt | odp. | rozlišení dopoledne a odpoledne |
z | +2 | odchylka od GMT |
zz | +02 | odchylka od GMT |
zzz | +02:00 | odchylka od GMT |
: | : | defaultní oddělovač času |
/ | / | defaultní oddělovač data |
Tímto jsme vyčerpali možnosti transformace struktury DateTime na datový typ String. Mám tu však nakonec dva malé přídavky – několik ukázek, jak naformátovat datum a čas, a také, jak vypadá zobrazení data a času při různém národním nastavení. Podívejte se na příklad, jehož zdrojový kód je vám samozřejmě k dispozici. Příklad nemá žádné praktické využití a slouží jen pro demonstraci odlišností zobrazení při různém národním prostředí.
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Mohlo by vás také zajímat
-
Jak lze snadno upravovat soubory v PDF?
14. září 2023 -
Nepodceňte UX na vašem webu: Proč na něm záleží?
10. dubna 2024 -
inPage AI: Jak na generování obsahu
18. července 2024 -
Optimalizace a zlepšení výkonu kódu: tipy a triky
14. srpna 2023
Nejnovější
-
Výkonný a kompaktní: ASOME Max Studio s výjimečným poměrem cena/výkon
11. listopadu 2024 -
Šokující data od Microsoftu: Kyberútoky rostou o stovky procent!
8. listopadu 2024 -
Chcete jedinečnou doménu? Objevte koncovky FOOD, MEME a MUSIC!
7. listopadu 2024 -
OpenAI představilo novou funkci ChatGPT Search
6. listopadu 2024
Jan Doležal
Led 2, 2015 v 16:58Je možné aby byl telefon předprogramován
Ietopočtem jen na 10 let? Koupil jsem si telefon Samsung v r . 2008.Do konce roku 2014 chodil správně.Ale po 31.12. 2014 naskočil 1.1.2014.Při manuálnim zadáni r.2015 vyskakuje heslo „chybný záznam“Rok výroby telefonu je 2004.Děkuji za odpověď