Dela via


Datum, tider och tidszoner

.NET tillhandahåller typer som representerar datum, tider och tidszoner. Den här artikeln beskriver dessa typer.

Förutom den grundläggande DateTime-strukturen tillhandahåller .NET följande klasser som stöder arbete med tidszoner:

  • TimeZoneInfo

    Använd den här klassen för att arbeta med valfri tidszon som är fördefinierad i ett system, för att skapa nya tidszoner och för att enkelt konvertera datum och tider från en tidszon till en annan. För ny utveckling använder du klassen TimeZoneInfo i stället för klassen TimeZone.

  • DateTimeOffset

    Använd den här strukturen för att arbeta med datum och tider vars förskjutning (eller skillnad) från UTC är känd. Strukturen DateTimeOffset kombinerar ett datum- och tidsvärde med dess förskjutning från UTC. På grund av dess relation till UTC identifierar ett enskilt datum- och tidsvärde otvetydigt en enskild tidpunkt. Detta gör ett DateTimeOffset värde mer portabelt från en dator till en annan än ett DateTime värde.

Följande klasser är avsedda att stöda arbete med tid:

  • TimeSpan

    Använd den här strukturen för att representera ett tidsintervall, till exempel en förfluten tid eller skillnaden mellan två datum.

  • TimeOnly

    Använd den här strukturen för att representera en tid utan datum. Tiden representerar timmar, minuter och sekunder för en icke-specifik dag. TimeOnly har ett intervall från 00:00:00.0000000 till 23:59:59.9999999. Den här typen kan användas för att ersätta DateTime och TimeSpan typer i koden när du använde dessa typer för att representera en tid. Mer information finns i Så här använder du strukturerna DateOnly och TimeOnly.

    Viktig

    TimeOnly är inte tillgängligt för .NET Framework.

  • TimeProvider

    Det här är en basklass som ger en abstraktion av tiden. Ett vanligt sätt att kontrollera den aktuella tiden är att använda DateTime.UtcNow eller DateTimeOffset.UtcNow. De här typerna ger dock ingen kontroll över vad som anses vara "nu". Varför skulle du vilja kontrollera det? Testbarhet. Anta till exempel att du skriver ett program för händelsespårning som ger påminnelser 1 dag före händelsen. Appens logik är att kontrollera händelsetiden varje timme och varna användaren när det är 24 timmar före händelsen. När du skriver dina tester för appen anger du din egen typ som omsluter DateTimeOffset.UtcNow för att testa den här logiken, men nu tillhandahåller .NET den här abstraktionsklassen åt dig.

    För mer information, se Vad är TimeProvider.

    Den TimeProvider typen ingår i .NET.

    För .NET Framework och .NET Standard tillhandahålls TimeProvider av Microsoft.Bcl.TimeProvider NuGet-paketet.

Följande klasser som stöder arbete med datum:

  • DateOnly

    Använd den här strukturen när du arbetar med ett värde som bara representerar ett datum. Datumet representerar hela dagen, från början av dagen till slutet. DateOnly har ett intervall från 0001-01-01 till 9999-12-31. Och den här typen representerar kombinationen månad, dag och år utan en viss tid. Om du tidigare använde en DateTime typ i koden för att representera ett datum som bortse från tiden använder du den här typen i dess ställe. Mer information finns i Så här använder du strukturerna DateOnly och TimeOnly.

    Viktig

    DateOnly är inte tillgängligt för .NET Framework.

Nästa avsnitt innehåller den information som du behöver för att arbeta med tidszoner och för att skapa tidszonsmedvetna program som kan konvertera datum och tider från en tidszon till en annan.

I det här avsnittet

Översikt över tidszon
Diskuterar terminologi, begrepp och problem med att skapa tidszonsmedvetna program.

välja mellan DateTime, DateTimeOffset, TimeSpan och TimeZoneInfo
Diskuterar när du ska använda typerna DateTime, DateTimeOffsetoch TimeZoneInfo när du arbetar med datum- och tidsdata.

Hitta de tidszoner som definierats i ett lokalt system
Beskriver hur du räknar upp de tidszoner som finns i ett lokalt system.

Gör så här: Räkna upp tidszoner som finns på en dator
Innehåller exempel som räknar upp de tidszoner som definierats i en dators register och som låter användare välja en fördefinierad tidszon från en lista.

Så här gör du: Få åtkomst till fördefinierade UTC- och lokala tidszonsobjekt
Beskriver hur du får åtkomst till Coordinated Universal Time och den lokala tidszonen.

Så här instansierar du ett TimeZoneInfo-objekt
Beskriver hur du instansierar ett TimeZoneInfo objekt från det lokala systemregistret.

Instansiera ett DateTimeOffset-objekt
Beskriver hur ett DateTimeOffset objekt kan instansieras och hur ett DateTime-värde kan konverteras till ett DateTimeOffset värde.

Så här skapar du tidszoner utan justeringsregler
Beskriver hur du skapar en anpassad tidszon som inte stöder övergången till och från sommartid.

Så här skapar du tidszoner med justeringsregler
Beskriver hur du skapar en anpassad tidszon som stöder en eller flera övergångar till och från sommartid.

Spara och återställa tidszoner
Beskriver TimeZoneInfo stöd för serialisering och deserialisering av tidszonsdata och illustrerar några av de scenarier där dessa funktioner kan användas.

Gör så här: Spara tidszoner i en inbäddad resurs
Beskriver hur du skapar en anpassad tidszon och sparar informationen i en resursfil.

Så här återställer du tidszoner från en inbäddad resurs
Beskriver hur du instansierar anpassade tidszoner som har sparats i en inbäddad resursfil.

Utföra aritmetiska åtgärder med datum och tider
Beskriver problemen med att lägga till, subtrahera och jämföra värden för DateTime och DateTimeOffset.

Så här använder du tidszoner i datum- och tidsaritmetik
Beskriver hur du utför datum- och tidsaritmetik som återspeglar en tidszons justeringsregler.

Konvertera mellan DateTime och DateTimeOffset
Beskriver hur du konverterar mellan DateTime och DateTimeOffset värden.

Konvertera tider mellan tidszoner
Beskriver hur du konverterar tider från en tidszon till en annan.

Så här gör du för att lösa tvetydiga tider
Beskriver hur du löser en tvetydig tid genom att mappa den till tidszonens standardtid.

Så här gör du: Låt användarna lösa tvetydiga tider
Beskriver hur du låter en användare bestämma mappningen mellan en tvetydig lokal tid och samordnad universell tid.

Hänvisning

System.TimeZoneInfo