IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

12. diel - Dátum a čas v C# - DateOnly a TimeOnly

V dnešnom tutoriále budeme pokračovať v práci s dátumom a časom v C#. Predstavíme si štruktúry DateOnly a TimeOnly. Vytvoríme niekoľko ukážkových programov.

Štruktúra DateOnly

Táto štruktúra slúži na uloženie dátumu bez časovej informácie. Štruktúra DateOnly nemá žiadnu časovú informáciu, a preto reprezentuje dátum od začiatku až do konca dňa. Také správanie sa nám napríklad môže hodiť, ak chceme ukladať špecifické dáta. Takými dátami môžu byť deň narodenia, výročia nejakej udalosti a tak ďalej.

Oproti štruktúre DateTime má štruktúra DateOnly tieto výhody:

  • DateTime štruktúra môže zmeniť dátum na budúci alebo predchádzajúci deň, ak je naň aplikovaná časová zóna. Toto sa s DateOnly stať nemôže.
  • Serializácia štruktúry DateTime tiež zahŕňa časovú informáciu, čo môže byť v nejakých prípadoch na naše účely nežiaduce.
  • DateTime štruktúra v pamäti zaberá viac miesta v porovnaní s DateOnly štruktúrou.
Vytvorenie inštancie

Teraz si ukážeme spôsoby akými môžeme vytvoriť inštancie štruktúry DateOnly. Najprv si vytvoríme nový projekt DateOnlyATimeOnly cielený na verziu .NET 7 alebo vyššiu.

Pozor! Štruktúry DateOnly a TimeOnly sú v plnej funkčnosti dostupné iba pre verziu .NET 7 a vyššiu a Visual Studio 2022 verzie 17.4 a vyššiu.

Teraz si ukážeme ako vytvoriť DateOnly pomôcť volaní bezparametrického konštruktora:

Výstup programu vyzerá nasledovne:

V nasledujúcej ukážke sa pozrieme na to, ako vytvoriť DateOnly štruktúru s nami vybranými parametrami:

Výstup programu vyzerá nasledovne:

V poslednej ukážke týkajúcej sa vytvorenia inštancie si ukážeme, ako vytvoriť DateOnly štruktúru s dnešným dátumom. DateOnly štruktúra neobsahuje vlastnosť, alebo metódu, ktorá by nám vytvorila DateOnly štruktúru s dnešným dátumom. A preto musíme použiť statickú metódu FromDateTime() zo štruktúry DateOnly nasledujúcim spôsobom:

Výstup programu vyzerá nasledovne:

Vlastnosti

DateOnly štruktúra má nasledujúce vlastnosti:

  • Day - vracia hodnotu dňa,
  • Month - vracia hodnotu mesiaca,
  • Year - vracia hodnotu roka,
  • DayOfYear - vracia koľký deň v roku sa daný dátum nachádza (hodnota je v rozmedzí 1 - 366),
  • DayNumber - vracia počet dní od 1. 1. 0001 podľa Gregoriánskeho kalendára,
  • DayOfWeek - vracia deň v týždni DayOfWeek s hodnotou dňa inštancie.
Prebrané vlastnosti si ukážeme v nasledujúcej ukážke:

Výstup programu vyzerá nasledovne:

Metódy

Teraz sa pozrime na metódy. Metódy nemenia inštanciu DateOnly, ale vracajú novú, v ktorej sú dané zmeny vykonané.

Podobné metódy sme si prebrali pri štruktúre DateTime v lekcii Dátum a čas v C#.

Zmena vnútornej hodnoty

Rovnako ako pri štruktúre DateTime, tak aj pri DateOnly môžeme s vnútornou hodnotou dáta veľmi jednoducho manipulovať pomocou metód, ktoré pridávajú rôzne časové úseky. Ako parameter berú počet úsekov (napr. dní), ktoré chceme pridať. Ak ich chceme naopak ubrať, použijeme zápornú hodnotu.

Za účelom zmeny vnútornej hodnoty máme k dispozícii metódy:

  • AddDays(),
  • AddMonths(),
  • AddYears().
Parsovanie

Rovnako ako sme si ukazovali parsovanie pre štruktúru DateTime, funguje parsovanie aj pre štruktúru DateOnly. Opäť môžeme použiť statické metódy Parse(), ako aj TryParse() na štruktúre DateOnly.

V najjednoduchšej podobe načítame dátum takto:

Výstup:

Keď chceme zadávaný formát ovplyvniť, použijeme na to takzvaný pattern. Ten môže mať napr. nasledujúcu podobu:

Viac o formátoch nájdeme v oficiálnej Microsoft dokumentácii.

Na parsovanie potom použijeme metódu ParseExact() a odovzdáme jej náš pattern takto:

Dostaneme podobný výstup:

Popri ParseExact() môžeme použiť aj metódu TryParseExact().

Prevod na text

Pre štruktúru DateOnly máme formátovanie vo vnútri volania metódy ToString(). Nasledujúca ukážka nám vypíše do konzoly dátum v požadovanom formáte:

Výstup:

Štruktúra DateOnly má predpripravené pre výpis dáta v krátkom a dlhom formáte tieto metódy:

  • ToShortDateString()
  • ToLongDateString()
Štruktúru DateOnly môžeme porovnávať pomocou operátorov porovnania: > < ==.

Štruktúra TimeOnly

Táto štruktúra reprezentuje hodnotu času jedného dňa. Hodnota štruktúry TimeOnly môže byť v intervale 00:00:00.0000000 - 23:59:59.9999999. Oproti štruktúre TimeSpan má štruktúra TimeOnly tieto výhody:

  • Štruktúra TimeSpan reprezentuje nejaký časový interval, ako napríklad čas nameraný na stopkách. Jeho hodnota môže byť aj záporná. To indikuje, že sa vraciame v čase, čo ale v kontexte indikácie špecifického času nejakého dňa nedáva zmysel.
  • Pri použití štruktúry TimeSpan ako časovej hodnoty dňa existuje riziko manipulácie jej hodnoty, ktorá tak by mohla byť vyššia ako 24 hodín. To sa pri štruktúre TimeOnly stať nemôže.
  • TimeOnly štruktúra oproti TimeSpan zaberá menej miesta v pamäti.
Vytvorenie inštancie

Inštanciu štruktúry TimeOnly môžeme vytvoriť volaním bezparametrického konštruktora takto:

Výstup programu vyzerá nasledovne:

Inštanciu štruktúry TimeOnly môžeme vytvoriť aj s nami vybranými parametrami v jej konštruktore:

Výstup programu potom vyzerá takto:

V poslednej ukážke týkajúcej sa vytvorenia inštancie si ukážeme, ako vytvoriť TimeOnly štruktúru s aktuálnym časom pomocou statickej metódy FromDateTime() štruktúry TimeOnly:

Keďže TimeOnly štruktúra neobsahuje vlastnosť ani metódu pre tvorbu inštancie s aktuálnym časom, pomohli sme si metódou FromDateTime(), ktoré sme odovzdali aktuálny dátum a čas DateTime.Now.

Výstup programu potom vyzerá takto:

Vlastnosti

TimeOnly štruktúra má nasledujúce vlastnosti:

  • Hour - vráti hodnotu hodiny,
  • Minute - vráti hodnotu minút,
  • Second - vráti hodnotu sekúnd,
  • Millisecond - vráti hodnotu milisekúnd,
  • MicroSecond - vráti hodnotu microsekúnd,
  • Ticks - vráti hodnotu ticks.
Prebrané vlastnosti si ukážeme v nasledujúcej ukážke:

Výstup programu potom vyzerá takto:

Metódy

Teraz sa pozrime na metódy. Metódy nemenia inštanciu TimeOnly, ale vracajú novú, v ktorej sú dané zmeny vykonané.

Podobné metódy sme si prebrali pri štruktúre TimeSpan v lekcii Dátum a čas v C#.

Zmena vnútornej hodnoty

Rovnako ako u štruktúry DateTime, tak aj s TimeOnly vnútornou hodnotou času môžeme veľmi jednoducho manipulovať pomocou metód, ktoré pridávajú rôzne časové úseky. Ako parameter berú počet úsekov (napr. dní), ktoré chceme pridať. Ak ich chceme naopak ubrať, použijeme zápornú hodnotu. Za účelom zmeny hodnoty teda slúžia metódy:

  • Add(),
  • AddHours(),
  • AddMinutes().
Metóda IsBetween()

TimeOnly inštancie štruktúry ešte majú jednu užitočnú metódu IsBetween(). Táto metóda nám dokáže vyhodnotiť, či čas zapadá do intervalu alebo nie. To by sme mohli napríklad použiť na zistenie, či má obchod práve otvorené. Metódu IsBetween() použijeme takto:

Výstup programu potom vyzerá takto:

Parsovanie

Rovnako ako sme si ukazovali parsovanie pri štruktúre DateOnly funguje aj parsovanie pre TimeOnly. Opäť môžeme použiť statické metódy Parse(), ako aj TryParse() na štruktúre TimeOnly.

V najjednoduchšej podobe načítame dátum takto:

Výstup:

Keď chceme zadávaný formát ovplyvniť, použijeme na to takzvaný pattern. Ten môže mať napr. nasledujúcu podobu:

Viac o formátoch nájdeme v oficiálnej Microsoft dokumentácii.

Na parsovanie potom použijeme metódu ParseExact() a odovzdáme jej náš pattern takto:

Dostaneme tento výstup:

Popri ParseExact() môžeme použiť aj metódu TryParseExact().

Prevod na text

Teraz sa pozrime na prevod času do textu, ktorý nám bude užitočný pri výpise času. Samozrejme funguje metóda ToString(), ktorá je bez parametrov a C# ju volá implicitne. Metóde môžeme dať ako parameter pattern, aby vrátila čas v nami požadovanom formáte:

Výpis:

Štruktúra TimeOnly má predpripravené pre výpis dáta v krátkom a dlhom formáte tieto metódy:

  • ToShorTimeString()
  • ToLongTimeString()
Štruktúru TimeOnly môžeme porovnávať pomocou operátorov porovnania: > < ==.

 

Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 37x (186.38 kB)
Aplikácia je vrátane zdrojových kódov v jazyku C#

 

Predchádzajúci článok
Diár s databázou v C #
Všetky články v sekcii
Objektovo orientované programovanie v C #
Preskočiť článok
(neodporúčame)
Rozhranie (interface)
Článok pre vás napísal Petr Malečík
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Zajímám se o technologie na platformě .NET. Nejradši mám vývoj v Back-Endu ať už se jedná o REST API a nebo GraphQL.
Aktivity