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:
-
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.
-
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:
-
Tato struktura slouží k znázornění časového intervalu, například uplynulého časového intervalu nebo rozdílu mezi dvěma daty.
-
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 od00:00:00.0000000
do23:59:59.9999999
. Tento typ lze použít k nahrazeníDateTime
aTimeSpan
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.
-
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
neboDateTimeOffset.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ý zahrnujeDateTimeOffset.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:
-
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 od0001-01-01
do9999-12-31
. A tento typ představuje kombinaci měsíce, dne a roku bez určitého času. Pokud jste dříve použiliDateTime
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.