Sdílet prostřednictvím


Data, časy a časová pásma

.NET poskytuje typy, které představují data, časy a časová pásma. Tento článek popisuje tyto typy.

Kromě základní struktury DateTime poskytuje .NET následující třídy, které podporují práci s časovými pásmy:

  • TimeZoneInfo

    Pomocí této třídy můžete pracovat s libovolným časovým pásmem, které je předdefinované v systému, vytvářet nová časová pásma a snadno převádět data a časy z jednoho časového pásma do jiného. Pro nový vývoj použijte místo třídy TimeZoneInfo třídu TimeZone.

  • DateTimeOffset

    Tato struktura slouží k práci s daty a časy, jejichž posun (nebo rozdíl) od utc je známý. Struktura DateTimeOffset kombinuje hodnotu data a času s posunem tohoto času od času UTC. Díky svému vztahu k UTC hodnota data a času jednoznačně určuje jeden bod v čase. Díky tomu je hodnota DateTimeOffset přenosnější z jednoho počítače do jiného než hodnota DateTime.

Následující třídy pro podporu práce s časem:

  • TimeSpan

    Tato struktura slouží k znázornění časového intervalu, například uplynulého časového intervalu nebo rozdílu mezi dvěma daty.

  • TimeOnly

    Pomocí této struktury můžete znázorňovat čas bez data. Čas představuje hodiny, minuty a sekundy neurčitého dne. TimeOnly má rozsah od 00:00:00.0000000 do 23:59:59.9999999. Tento typ lze použít k nahrazení DateTime a TimeSpan typů v kódu, když jste tyto typy použili k reprezentaci času. Další informace naleznete v tématu Jak používat struktury DateOnly a TimeOnly.

    Důležitý

    TimeOnly není k dispozici pro rozhraní .NET Framework.

  • TimeProvider

    Toto je základní třída, která poskytuje abstrakci času. Běžným způsobem kontroly aktuálního času je použití DateTime.UtcNow nebo DateTimeOffset.UtcNow. Tyto typy ale neposkytují žádnou kontrolu nad tím, co se považuje za "nyní". Proč byste to chtěli ovládat? Testovatelnost. Představte si například, že píšete aplikaci pro sledování událostí, která poskytuje připomenutí 1 den před událostí. Logika aplikace je kontrolovat čas události každou hodinu a upozornit uživatele, jakmile bude 24 hodin před událostí. Při psaní testů pro aplikaci byste zadali vlastní typ, který zahrnuje DateTimeOffset.UtcNow k otestování této logiky, ale nyní .NET nyní za vás poskytuje tuto třídu abstrakce.

    Další informace naleznete v tématu What is TimeProvider.

    Typ TimeProvider je součástí .NET.

    Pro rozhraní .NET Framework a .NET Standard poskytuje TimeProvider balíček Microsoft.Bcl.TimeProvider NuGet.

Následující třídy pro podporu práce s kalendářními daty:

  • DateOnly

    Tuto strukturu použijte při práci s hodnotou, která představuje pouze datum. Datum představuje celý den od začátku dne do konce. DateOnly má rozsah od 0001-01-01 do 9999-12-31. A tento typ představuje kombinaci měsíce, dne a roku bez určitého času. Pokud jste dříve použili DateTime typ v kódu k vyjádření data, které ignorovalo čas, použijte tento typ na svém místě. Další informace naleznete v tématu Jak používat struktury DateOnly a TimeOnly.

    Důležitý

    DateOnly není k dispozici pro rozhraní .NET Framework.

V další části najdete informace, které potřebujete pro práci s časovými pásmy a vytváření aplikací pracujících s časovým pásmem, které můžou převádět data a časy z jednoho časového pásma do jiného.

V této části

Přehled časových pásem
Popisuje terminologii, koncepty a problémy související s vytvářením aplikací pracujících s časovým pásmem.

Volba mezi dateTime, DateTimeOffset, TimeSpan a TimeZoneInfo
Popisuje, kdy použít typy DateTime, DateTimeOffseta TimeZoneInfo při práci s daty data a času.

Zjišťování časových pásem definovaných v místním systému
Popisuje, jak vytvořit výčet časových pásem nalezených v místním systému.

Postupy: Vytvoření výčtu časových pásem přítomných na počítači
Poskytuje příklady, které uvádějí časová pásma definovaná v registru počítače a umožňují uživatelům vybrat předdefinované časové pásmo ze seznamu.

Postupy: Přístup k předdefinovaným objektům UTC a objektům místního časového pásma
Popisuje, jak získat přístup ke koordinovanému univerzálnímu času a místnímu časovému pásmu.

Postupy: Vytvoření instance objektu TimeZoneInfo
Popisuje, jak vytvořit instanci objektu TimeZoneInfo z místního systémového registru.

vytvoření instance objektu DateTimeOffset
Popisuje způsoby vytvoření instance objektu DateTimeOffset a způsoby, jak lze hodnotu DateTime převést na hodnotu DateTimeOffset.

Postupy: Vytváření časových pásem bez pravidel úprav
Popisuje, jak vytvořit vlastní časové pásmo, které nepodporuje přechod do a z letního času.

Postupy: Vytváření časových pásem s pravidly úprav
Popisuje, jak vytvořit vlastní časové pásmo, které podporuje jeden nebo více přechodů do a z letního času.

ukládání a obnovování časových pásem
Popisuje TimeZoneInfo podporu serializace a deserializace dat časového pásma a ilustruje některé scénáře, ve kterých lze tyto funkce použít.

Jak na to: Uložit časová pásma do vloženého prostředku
Popisuje, jak vytvořit vlastní časové pásmo a uložit jeho informace do zdrojového souboru.

Jak na to: Obnovení časových pásem z vloženého prostředku
Popisuje, jak vytvořit instanci vlastních časových pásem, která byla uložena ve vloženém souboru prostředků.

provádění aritmetických operací s daty a časy
Popisuje problémy související se sčítáním, odčítáním a porovnáním hodnot DateTime a DateTimeOffset.

Jak používat časová pásma v aritmetice s datem a časem
Popisuje, jak provádět výpočty data a času, které odrážejí pravidla úprav časového pásma.

Převod mezi DateTime a DateTimeOffset
Popisuje, jak převést mezi hodnotami DateTime a DateTimeOffset.

Převádění časů mezi časovými pásmy
Popisuje, jak převést časy z jednoho časového pásma na jiné.

Postupy: Řešení nejednoznačných časů
Popisuje, jak vyřešit nejednoznačný čas jeho mapováním na standardní čas časového pásma.

Postupy: Umožnit uživatelům vyřešit nejednoznačné časy
Popisuje, jak umožnit uživateli určit mapování mezi nejednoznačným místním časem a koordinovaným univerzálním časem.

Odkaz

System.TimeZoneInfo