Freigeben über


Auswählen zwischen DateTime, DateOnly, DateTimeOffset, TimeSpan, TimeOnly und TimeZoneInfo

.NET-Anwendungen können Datums- und Uhrzeitinformationen auf verschiedene Arten verwenden. Die häufigeren Verwendungen von Datums- und Uhrzeitinformationen umfassen:

  • Um nur ein Datum widerzuspiegeln, sodass Zeitinformationen nicht wichtig sind.
  • Um nur eine Uhrzeit widerzuspiegeln, sodass Datumsinformationen nicht wichtig sind.
  • Um ein abstraktes Datum und eine Uhrzeit widerzuspiegeln, die nicht an eine bestimmte Uhrzeit und einen bestimmten Ort gebunden ist (z. B. die meisten Geschäfte in einer internationalen Kette, die am Wochentag um 9:00 Uhr geöffnet ist).
  • Um Datums- und Uhrzeitinformationen aus Quellen außerhalb von .NET abzurufen, typischerweise, wo Datums- und Uhrzeitinformationen in einfachen Datentypen gespeichert werden.
  • Um einen einzelnen Zeitpunkt eindeutig und unmissverständlich zu identifizieren. Einige Anwendungen erfordern, dass ein Datum und eine Uhrzeit nur auf dem Hostsystem eindeutig sind. Andere Apps erfordern, dass sie in mehreren Systemen eindeutig sind (d. h. ein auf dem einen System serialisiertes Datum kann weltweit auf einem anderen System sinnvoll deserialisiert und verwendet werden).
  • Um mehrere bezogene Zeiten beizubehalten (z. B. die lokale Zeit des Antragstellers und die Empfangszeit des Servers für eine Webanforderung).
  • Um Datums- und Uhrzeitarithmetik durchzuführen, möglicherweise mit einem Ergebnis, das einen einzelnen Zeitpunkt eindeutig identifiziert.

.NET enthält die DateTime, DateOnly, DateTimeOffset, TimeSpan, TimeOnlyund TimeZoneInfo Typen, die zum Erstellen von Anwendungen verwendet werden können, die mit Datums- und Uhrzeitwerten arbeiten.

Anmerkung

In diesem Artikel wird nicht TimeZone behandelt, da seine Funktionalität fast vollständig in die TimeZoneInfo Klasse integriert ist. Verwenden Sie nach Möglichkeit die TimeZoneInfo Klasse anstelle der TimeZone Klasse.

Die DateTimeOffset-Struktur

Die DateTimeOffset-Struktur stellt einen Datums- und Uhrzeitwert zusammen mit einem Offset dar, der angibt, um wie viel sich dieser Wert von UTC unterscheidet. Somit identifiziert der Wert immer eindeutig einen einzelnen Zeitpunkt.

Der DateTimeOffset Typ enthält alle Funktionen des DateTime Typs zusammen mit dem Bewusstsein für Zeitzonen. Dadurch eignet es sich für Anwendungen, die:

  • Eindeutig und eindeutig einen einzelnen Zeitpunkt identifizieren. Der DateTimeOffset Typ kann verwendet werden, um die Bedeutung von "jetzt" eindeutig zu definieren, um Transaktionszeiten zu loggen, die Zeiten von System- oder Anwendungsereignissen zu protokollieren und die Erstellungs- und Änderungszeiten von Dateien aufzuzeichnen.
  • Führen Sie allgemeine Datums- und Uhrzeitarithmetik aus.
  • Bewahren Sie mehrere bezogene Zeiten auf, solange diese Zeiten als zwei separate Werte oder als zwei Elemente einer Struktur gespeichert werden.

Anmerkung

Diese Verwendungsarten für DateTimeOffset -Werte sind sehr viel häufiger als die für DateTime -Werte. Berücksichtigen Sie daher DateTimeOffset als Standarddatums- und Uhrzeittyp für die Anwendungsentwicklung.

Ein DateTimeOffset Wert ist nicht an eine bestimmte Zeitzone gebunden, kann aber aus einer Vielzahl von Zeitzonen stammen. Im folgenden Beispiel werden die Zeitzonen aufgeführt, zu denen eine Reihe von DateTimeOffset Werten (einschließlich einer lokalen Pazifischen Standardzeit) gehören kann.

using System;
using System.Collections.ObjectModel;

public class TimeOffsets
{
   public static void Main()
   {
      DateTime thisDate = new DateTime(2007, 3, 10, 0, 0, 0);
      DateTime dstDate = new DateTime(2007, 6, 10, 0, 0, 0);
      DateTimeOffset thisTime;

      thisTime = new DateTimeOffset(dstDate, new TimeSpan(-7, 0, 0));
      ShowPossibleTimeZones(thisTime);

      thisTime = new DateTimeOffset(thisDate, new TimeSpan(-6, 0, 0));
      ShowPossibleTimeZones(thisTime);

      thisTime = new DateTimeOffset(thisDate, new TimeSpan(+1, 0, 0));
      ShowPossibleTimeZones(thisTime);
   }

   private static void ShowPossibleTimeZones(DateTimeOffset offsetTime)
   {
      TimeSpan offset = offsetTime.Offset;
      ReadOnlyCollection<TimeZoneInfo> timeZones;

      Console.WriteLine("{0} could belong to the following time zones:",
                        offsetTime.ToString());
      // Get all time zones defined on local system
      timeZones = TimeZoneInfo.GetSystemTimeZones();
      // Iterate time zones
      foreach (TimeZoneInfo timeZone in timeZones)
      {
         // Compare offset with offset for that date in that time zone
         if (timeZone.GetUtcOffset(offsetTime.DateTime).Equals(offset))
            Console.WriteLine("   {0}", timeZone.DisplayName);
      }
      Console.WriteLine();
   }
}
// This example displays the following output to the console:
//       6/10/2007 12:00:00 AM -07:00 could belong to the following time zones:
//          (GMT-07:00) Arizona
//          (GMT-08:00) Pacific Time (US & Canada)
//          (GMT-08:00) Tijuana, Baja California
//
//       3/10/2007 12:00:00 AM -06:00 could belong to the following time zones:
//          (GMT-06:00) Central America
//          (GMT-06:00) Central Time (US & Canada)
//          (GMT-06:00) Guadalajara, Mexico City, Monterrey - New
//          (GMT-06:00) Guadalajara, Mexico City, Monterrey - Old
//          (GMT-06:00) Saskatchewan
//
//       3/10/2007 12:00:00 AM +01:00 could belong to the following time zones:
//          (GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna
//          (GMT+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague
//          (GMT+01:00) Brussels, Copenhagen, Madrid, Paris
//          (GMT+01:00) Sarajevo, Skopje, Warsaw, Zagreb
//          (GMT+01:00) West Central Africa
Imports System.Collections.ObjectModel

Module TimeOffsets
    Public Sub Main()
        Dim thisTime As DateTimeOffset

        thisTime = New DateTimeOffset(#06/10/2007#, New TimeSpan(-7, 0, 0))
        ShowPossibleTimeZones(thisTime)

        thisTime = New DateTimeOffset(#03/10/2007#, New TimeSpan(-6, 0, 0))
        ShowPossibleTimeZones(thisTime)

        thisTime = New DateTimeOffset(#03/10/2007#, New TimeSpan(+1, 0, 0))
        ShowPossibleTimeZones(thisTime)
    End Sub

    Private Sub ShowPossibleTimeZones(offsetTime As DateTimeOffset)
        Dim offset As TimeSpan = offsetTime.Offset
        Dim timeZones As ReadOnlyCollection(Of TimeZoneInfo)

        Console.WriteLine("{0} could belong to the following time zones:", _
                          offsetTime.ToString())
        ' Get all time zones defined on local system
        timeZones = TimeZoneInfo.GetSystemTimeZones()
        ' Iterate time zones
        For Each timeZone As TimeZoneInfo In timeZones
            ' Compare offset with offset for that date in that time zone
            If timeZone.GetUtcOffset(offsetTime.DateTime).Equals(offset) Then
                Console.WriteLine("   {0}", timeZone.DisplayName)
            End If
        Next
        Console.WriteLine()
    End Sub
End Module
' This example displays the following output to the console:
'       6/10/2007 12:00:00 AM -07:00 could belong to the following time zones:
'          (GMT-07:00) Arizona
'          (GMT-08:00) Pacific Time (US & Canada)
'          (GMT-08:00) Tijuana, Baja California
'       
'       3/10/2007 12:00:00 AM -06:00 could belong to the following time zones:
'          (GMT-06:00) Central America
'          (GMT-06:00) Central Time (US & Canada)
'          (GMT-06:00) Guadalajara, Mexico City, Monterrey - New
'          (GMT-06:00) Guadalajara, Mexico City, Monterrey - Old
'          (GMT-06:00) Saskatchewan
'       
'       3/10/2007 12:00:00 AM +01:00 could belong to the following time zones:
'          (GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna
'          (GMT+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague
'          (GMT+01:00) Brussels, Copenhagen, Madrid, Paris
'          (GMT+01:00) Sarajevo, Skopje, Warsaw, Zagreb
'          (GMT+01:00) West Central Africa

Die Ausgabe zeigt, dass jeder Datums- und Uhrzeitwert in diesem Beispiel zu mindestens drei verschiedenen Zeitzonen gehören kann. Der DateTimeOffset-Wert „6/10/2007“ zeigt, dass, wenn ein Datums- und Uhrzeitwert eine Sommerzeit darstellt, sein Offset von UTC noch nicht einmal unbedingt dem UTC-Basisoffset der Ursprungszeitzone oder dem in seinem Anzeigenamen vorgefundenen Offset von UTC entsprechen muss. Da ein einzelner DateTimeOffset Wert nicht eng mit seiner Zeitzone gekoppelt ist, kann er den Übergang einer Zeitzone zur und von der Sommerzeit nicht widerspiegeln. Dies kann problematisch sein, wenn die Datums- und Uhrzeitarithmetik verwendet wird, um einen DateTimeOffset Wert zu bearbeiten. Eine Erläuterung der Durchführung von Datums- und Uhrzeitarithmetik auf eine Weise, die die Anpassungsregeln einer Zeitzone berücksichtigt, finden Sie unter Ausführen von arithmetischen Vorgängen mit Datums- und Uhrzeitangaben.

Die DateTime-Struktur

Ein DateTime Wert definiert ein bestimmtes Datum und eine bestimmte Uhrzeit. Sie enthält eine Kind Eigenschaft, die begrenzte Informationen zur Zeitzone bereitstellt, zu der dieses Datum und diese Uhrzeit gehören. Der DateTimeKind Wert, der von der Kind-Eigenschaft zurückgegeben wird, gibt an, ob der DateTime Wert die Ortszeit (DateTimeKind.Local), koordinierte Weltzeit (UTC) (DateTimeKind.Utc) oder eine nicht angegebene Zeit (DateTimeKind.Unspecified) darstellt.

Die DateTime Struktur eignet sich für Anwendungen mit mindestens einem der folgenden Merkmale:

  • Arbeiten mit abstrakten Datums- und Uhrzeitangaben.
  • Arbeiten Sie mit Datums- und Uhrzeitangaben, für die Zeitzoneninformationen fehlen.
  • Arbeiten Sie nur mit UTC-Datums- und Uhrzeitangaben.
  • Führen Sie Datums- und Uhrzeitarithmetik durch, legen jedoch Wert auf allgemeine Ergebnisse. Beispielsweise ist es bei einer Addition, die sechs Monate zu einem bestimmten Datum und einer bestimmten Uhrzeit hinzufügt, häufig nicht wichtig, ob das Ergebnis für die Sommerzeit angepasst wird.

Wenn nicht ein bestimmter DateTime -Wert UTC darstellt, ist dieser Datums- und Uhrzeitwert häufig mehrdeutig oder in seiner Portierbarkeit eingeschränkt. Wenn z. B. ein DateTime-Wert die Ortszeit darstellt, ist er innerhalb dieser lokalen Zeitzone portierbar (d. a. wenn der Wert in einem anderen System in derselben Zeitzone deserialisiert wird, identifiziert dieser Wert immer noch eindeutig einen einzelnen Zeitpunkt). Außerhalb der lokalen Zeitzone kann dieser DateTime Wert mehrere Interpretationen aufweisen. Wenn die Kind-Eigenschaft des Werts DateTimeKind.Unspecified ist, ist er sogar noch weniger portierbar: Er ist jetzt innerhalb derselben Zeitzone mehrdeutig und möglicherweise sogar auf dem selben System, auf dem er erstmalig serialisiert wurde. Nur wenn ein DateTime-Wert UTC darstellt, identifiziert dieser Wert unabhängig vom System oder der Zeitzone, in denen der Wert verwendet wird, eindeutig einen einzelnen Zeitpunkt.

Wichtig

Beim Speichern oder Freigeben von DateTime-Daten verwenden Sie UTC und legen Sie die Kind-Eigenschaft des DateTime-Werts auf DateTimeKind.Utcfest.

Die DateOnly-Struktur

Die DateOnly-Struktur stellt ein bestimmtes Datum ohne Uhrzeit dar. Da keine Zeitkomponente vorhanden ist, stellt sie ein Datum vom Anfang des Tages bis zum Ende des Tages dar. Diese Struktur eignet sich ideal zum Speichern bestimmter Datumsangaben, z. B. eines Geburtsdatums, eines Jahrestags, eines Feiertags oder eines geschäftsbezogenen Datums.

Obwohl Sie DateTime verwenden können, während Sie die Zeitkomponente ignorieren, hat es einige Vorteile, DateOnly gegenüber DateTimezu verwenden.

  • Die DateTime-Struktur kann in den vorherigen oder nächsten Tag übergehen, wenn sie durch eine Zeitzone versetzt ist. DateOnly kann nicht um eine Zeitzone verschoben werden und stellt immer das festgelegte Datum dar.
  • Das Serialisieren einer DateTime-Struktur umfasst die Zeitkomponente, die die Absicht der Daten verdecken kann. Außerdem serialisiert DateOnly weniger Daten.
  • Wenn Code mit einer Datenbank interagiert, z. B. SQL Server, werden ganze Datumsangaben in der Regel als date Datentyp gespeichert, der keine Uhrzeit enthält. DateOnly entspricht dem Datenbanktyp besser.

Weitere Informationen zu DateOnlyerhalten Sie unter Wie Sie die DateOnly- und TimeOnly-Strukturen verwenden.

Wichtig

DateOnly ist für .NET Framework nicht verfügbar.

Die TimeSpan-Struktur

Die TimeSpan-Struktur stellt ein Zeitintervall dar. Die beiden typischen Verwendungen sind:

  • Darstellen des Zeitintervalls zwischen zwei Datums- und Uhrzeitwerten. Beispielsweise gibt das Subtrahieren eines DateTime Werts von einem anderen einen TimeSpan Wert zurück.
  • Messen der verstrichenen Zeit. Beispielsweise gibt die Stopwatch.Elapsed-Eigenschaft einen TimeSpan Wert zurück, der das Zeitintervall widerspiegelt, das seit dem Aufruf einer der Stopwatch Methoden vergangen ist, die mit dem Messen der verstrichenen Zeit beginnen.

Ein TimeSpan Wert kann auch als Ersatz für einen DateTime Wert verwendet werden, wenn dieser Wert eine Uhrzeit ohne Bezug auf einen bestimmten Tag wiedergibt. Diese Verwendung ähnelt den eigenschaften DateTime.TimeOfDay und DateTimeOffset.TimeOfDay, die einen TimeSpan Wert zurückgeben, der die Uhrzeit ohne Verweis auf ein Datum darstellt. Beispielsweise kann die TimeSpan-Struktur verwendet werden, um die tägliche Öffnungs- oder Schließzeit eines Geschäfts widerzuspiegeln, oder sie kann verwendet werden, um die Uhrzeit darzustellen, zu der ein regelmäßiges Ereignis eintritt.

Im folgenden Beispiel wird eine StoreInfo-Struktur definiert, die TimeSpan-Objekte für die Öffnungs- und Schließzeiten des Geschäfts sowie ein TimeZoneInfo-Objekt enthält, das die Zeitzone des Geschäfts darstellt. Die Struktur enthält auch zwei Methoden, IsOpenNow und IsOpenAt, die angibt, ob der Speicher zu einem zeitpunkt geöffnet ist, der vom Benutzer angegeben wird, der sich in der lokalen Zeitzone befindet.

using System;

public struct StoreInfo
{
   public String store;
   public TimeZoneInfo tz;
   public TimeSpan open;
   public TimeSpan close;

   public bool IsOpenNow()
   {
      return IsOpenAt(DateTime.Now.TimeOfDay);
   }

   public bool IsOpenAt(TimeSpan time)
   {
      TimeZoneInfo local = TimeZoneInfo.Local;
      TimeSpan offset = TimeZoneInfo.Local.BaseUtcOffset;

      // Is the store in the same time zone?
      if (tz.Equals(local)) {
         return time >= open & time <= close;
      }
      else {
         TimeSpan delta = TimeSpan.Zero;
         TimeSpan storeDelta = TimeSpan.Zero;

         // Is it daylight saving time in either time zone?
         if (local.IsDaylightSavingTime(DateTime.Now.Date + time))
            delta = local.GetAdjustmentRules()[local.GetAdjustmentRules().Length - 1].DaylightDelta;

         if (tz.IsDaylightSavingTime(TimeZoneInfo.ConvertTime(DateTime.Now.Date + time, local, tz)))
            storeDelta = tz.GetAdjustmentRules()[tz.GetAdjustmentRules().Length - 1].DaylightDelta;

         TimeSpan comparisonTime = time + (offset - tz.BaseUtcOffset).Negate() + (delta - storeDelta).Negate();
         return comparisonTime >= open && comparisonTime <= close;
      }
   }
}
Public Structure StoreInfo
    Dim store As String
    Dim tz As TimeZoneInfo
    Dim open As TimeSpan
    Dim close As TimeSpan

    Public Function IsOpenNow() As Boolean
        Return IsOpenAt(Date.Now.TimeOfDay)
    End Function

    Public Function IsOpenAt(time As TimeSpan) As Boolean
        Dim local As TimeZoneInfo = TimeZoneInfo.Local
        Dim offset As TimeSpan = TimeZoneInfo.Local.BaseUtcOffset

        ' Is the store in the same time zone?
        If tz.Equals(local) Then
            Return time >= open AndAlso time <= close
        Else
            Dim delta As TimeSpan = TimeSpan.Zero
            Dim storeDelta As TimeSpan = TimeSpan.Zero

            ' Is it daylight saving time in either time zone?
            If local.IsDaylightSavingTime(Date.Now.Date + time) Then
                delta = local.GetAdjustmentRules(local.GetAdjustmentRules().Length - 1).DaylightDelta
            End If
            If tz.IsDaylightSavingTime(TimeZoneInfo.ConvertTime(Date.Now.Date + time, local, tz))
                storeDelta = tz.GetAdjustmentRules(tz.GetAdjustmentRules().Length - 1).DaylightDelta
            End If
            Dim comparisonTime As TimeSpan = time + (offset - tz.BaseUtcOffset).Negate() + (delta - storeDelta).Negate
            Return (comparisonTime >= open AndAlso comparisonTime <= close)
        End If
    End Function
End Structure

Die StoreInfo -Struktur kann dann von Clientcode wie folgt verwendet werden.

public class Example
{
   public static void Main()
   {
      // Instantiate a StoreInfo object.
      var store103 = new StoreInfo();
      store103.store = "Store #103";
      store103.tz = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
      // Store opens at 8:00.
      store103.open = new TimeSpan(8, 0, 0);
      // Store closes at 9:30.
      store103.close = new TimeSpan(21, 30, 0);

      Console.WriteLine("Store is open now at {0}: {1}",
                        DateTime.Now.TimeOfDay, store103.IsOpenNow());
      TimeSpan[] times = { new TimeSpan(8, 0, 0), new TimeSpan(21, 0, 0),
                           new TimeSpan(4, 59, 0), new TimeSpan(18, 31, 0) };
      foreach (var time in times)
         Console.WriteLine("Store is open at {0}: {1}",
                           time, store103.IsOpenAt(time));
   }
}
// The example displays the following output:
//       Store is open now at 15:29:01.6129911: True
//       Store is open at 08:00:00: True
//       Store is open at 21:00:00: True
//       Store is open at 04:59:00: False
//       Store is open at 18:31:00: True
Module Example
    Public Sub Main()
        ' Instantiate a StoreInfo object.
        Dim store103 As New StoreInfo()
        store103.store = "Store #103"
        store103.tz = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time")
        ' Store opens at 8:00.
        store103.open = new TimeSpan(8, 0, 0)
        ' Store closes at 9:30.
        store103.close = new TimeSpan(21, 30, 0)

        Console.WriteLine("Store is open now at {0}: {1}",
                          Date.Now.TimeOfDay, store103.IsOpenNow())
        Dim times() As TimeSpan = {New TimeSpan(8, 0, 0),
                                    New TimeSpan(21, 0, 0),
                                    New TimeSpan(4, 59, 0),
                                    New TimeSpan(18, 31, 0)}
        For Each time In times
            Console.WriteLine("Store is open at {0}: {1}",
                              time, store103.IsOpenAt(time))
        Next
    End Sub
End Module
' The example displays the following output:
'       Store is open now at 15:29:01.6129911: True
'       Store is open at 08:00:00: True
'       Store is open at 21:00:00: False
'       Store is open at 04:59:00: False
'       Store is open at 18:31:00: False

Die TimeOnly-Struktur

Die TimeOnly Struktur stellt einen Tageszeitwert dar, z. B. eine tägliche Weckeruhr oder die Uhrzeit, zu der Sie jeden Tag Mittagessen essen. TimeOnly ist auf den Bereich 00:00:00.0000000 - 23:59:59.9999999 beschränkt, eine bestimmte Tageszeit.

Vor der Einführung des TimeOnly Typs haben Programmierer in der Regel entweder den DateTime Typ oder den TimeSpan Typ verwendet, um eine bestimmte Uhrzeit darzustellen. Die Verwendung dieser Strukturen zum Simulieren einer Zeit ohne Datum kann jedoch einige Probleme verursachen, die TimeOnly lösen:

  • TimeSpan stellt verstrichene Zeit dar, z. B. die mit einer Stoppuhr gemessene Zeit. Der obere Bereich beträgt mehr als 29.000 Jahre, und sein Wert kann negativ sein, um die Rückwärtsbewegung in der Zeit anzuzeigen. Ein negativer TimeSpan gibt keine bestimmte Tageszeit an.
  • Wenn TimeSpan als Tageszeit verwendet wird, besteht das Risiko, dass sie außerhalb des 24-Stunden-Tages in einen Wert geändert werden kann. TimeOnly hat dieses Risiko nicht. Wenn die Arbeitsschicht eines Mitarbeiters bzw. einer Mitarbeiterin beispielsweise um 18:00 Uhr beginnt und 8 Stunden dauert, wird das Hinzufügen von 8 Stunden zur TimeOnly-Struktur auf 2:00 Uhr übertragen.
  • Die Verwendung von DateTime für eine Tageszeit erfordert, dass ein beliebiges Datum mit der Uhrzeit verknüpft und dann später ignoriert wird. Es ist üblich, DateTime.MinValue (0001-01-01) als Datum auszuwählen, jedoch wenn Stunden vom DateTime-Wert subtrahiert werden, kann eine OutOfRange-Ausnahme auftreten. TimeOnly hat dieses Problem nicht, weil die Zeit sich innerhalb des 24-Stunden-Zeitrahmens vorwärts und rückwärts bewegt.
  • Beim Serialisieren einer DateTime-Struktur wird die Datumskomponente eingeschlossen, die die eigentliche Absicht der Daten verschleiern kann. Außerdem serialisiert TimeOnly weniger Daten.

Weitere Informationen zu TimeOnly finden Sie unter Verwenden der DateOnly- und TimeOnly-Strukturen.

Wichtig

TimeOnly ist für .NET Framework nicht verfügbar.

Die TimeZoneInfo-Klasse

Die TimeZoneInfo Klasse stellt eine der Zeitzonen der Erde dar und ermöglicht die Umwandlung von Datum und Uhrzeit in einer Zeitzone in eine andere Zeitzone. Die TimeZoneInfo-Klasse ermöglicht das Arbeiten mit Datums- und Uhrzeitangaben, sodass jeder Datums- und Uhrzeitwert einen einzelnen Zeitpunkt eindeutig identifiziert. Die TimeZoneInfo Klasse ist ebenfalls erweiterbar. Sie hängt zwar von den für Windows-Systemen bereitgestellten Und in der Registrierung definierten Zeitzoneninformationen ab, unterstützt jedoch die Erstellung von benutzerdefinierten Zeitzonen. Sie unterstützt auch die Serialisierung und Deserialisierung von Zeitzoneninformationen.

In einigen Fällen kann die vollständige Nutzung der TimeZoneInfo Klasse weitere Entwicklungsarbeiten erfordern. Wenn Datums- und Uhrzeitwerte nicht eng mit den Zeitzonen verknüpft sind, zu denen sie gehören, ist weitere Arbeit erforderlich. Sofern Ihre Anwendung keinen Mechanismus zum Verknüpfen eines Datums und einer Uhrzeit mit der zugeordneten Zeitzone bereitstellt, ist es einfach, dass ein bestimmter Datums- und Uhrzeitwert von seiner Zeitzone getrennt wird. Eine Methode zum Verknüpfen dieser Informationen besteht darin, eine Klasse oder Struktur zu definieren, die sowohl den Datums- als auch den Uhrzeitwert und das zugehörige Zeitzonenobjekt enthält.

Um die Unterstützung von Zeitzonen in .NET zu nutzen, müssen Sie die Zeitzone kennen, zu der ein Datums- und Uhrzeitwert gehört, wenn dieses Datums- und Uhrzeitobjekt instanziiert wird. Die Zeitzone ist häufig nicht bekannt, insbesondere in Web- oder Netzwerk-Apps.

Weitere Informationen