Freigeben über


Übersicht über Zeitzonen

Die TimeZoneInfo Klasse vereinfacht die Erstellung von Zeitzonenfähigen Anwendungen. Die TimeZone Klasse unterstützt das Arbeiten mit der lokalen Zeitzone und koordinierter Weltzeit (Coordinated Universal Time, UTC). Die TimeZoneInfo Klasse unterstützt beide Zonen sowie jede Zeitzone, in der informationen in der Registrierung vordefiniert sind. Sie können auch benutzerdefinierte TimeZoneInfo Zeitzonen definieren, zu denen das System keine Informationen enthält.

Wesentliche Bestandteile der Zeitzone

Eine Zeitzone ist eine geografische Region, in der die gleiche Zeit verwendet wird. Typischerweise, aber nicht immer, sind angrenzende Zeitzonen eine Stunde auseinander. Die Zeit in einer der Zeitzonen der Welt kann als Offset von koordinierter Weltzeit (UTC) ausgedrückt werden.

Viele der Weltzeitzonen unterstützen Sommerzeit. Bei der Sommerzeit wird versucht, eine größere Anzahl von Stunden mit Tageslicht zu nutzen, indem die Uhrzeit im Frühjahr oder Frühsommer um eine Stunde vorgestellt und im Spätsommer oder Herbst auf Normalzeit (oder Standardzeit) zurückgestellt wird. Diese Änderungen an und von der Standardzeit werden als Anpassungsregeln bezeichnet.

Der Übergang zu und von Sommerzeit in einer bestimmten Zeitzone kann entweder durch eine feste oder eine unverankerte Anpassungsregel definiert werden. Eine feste Anpassungsregel legt ein bestimmtes Datum fest, an dem der Übergang zu oder von Sommerzeit jedes Jahr stattfindet. Beispielsweise folgt ein Übergang von Sommerzeit zu Standardzeit, der jedes Jahr am 25. Oktober stattfindet, einer festen Anpassungsregel. Viel häufiger sind gleitende Anpassungsregeln, die einen bestimmten Tag einer bestimmten Woche eines bestimmten Monats für den Übergang zu oder von Sommerzeit festlegen. Beispielsweise folgt ein Übergang von Standardzeit zu Sommerzeit, der am dritten Sonntag im März stattfindet, einer flexiblen Anpassungsregel.

Bei Zeitzonen, die Anpassungsregeln unterstützen, führt die Umstellung von und auf Sommerzeit zu zwei anomalen Uhrzeiten: ungültige Uhrzeiten und mehrdeutige Uhrzeiten. Eine ungültige Zeit ist eine nicht vorhandene Zeit, die durch den Übergang von der Standardzeit zur Sommerzeit entsteht. Wenn dieser Übergang z. B. an einem bestimmten Tag um 2:00 Uhr erfolgt und die Zeit auf 3:00 Uhr geändert wird, ist jedes Zeitintervall zwischen 2:00 Uhr und 2:59:59 Uhr ungültig. Eine mehrdeutige Zeit ist eine Zeit, die zwei verschiedenen Zeiten in einer einzelnen Zeitzone zugeordnet werden kann. Es entsteht durch den Übergang von Sommerzeit zu Normalzeit. Wenn dieser Übergang z. B. an einem bestimmten Tag um 2:00 Uhr auftritt und die Zeit um 1:00 Uhr geändert wird, kann jedes Zeitintervall zwischen 1:00 Uhr und 1:59:59 Uhr als Standardzeit oder Sommerzeit interpretiert werden.

Zeitzonenterminologie

In der folgenden Tabelle sind Begriffe definiert, die häufig beim Arbeiten mit Zeitzonen und beim Entwickeln von Anwendungen mit Zeitzonen verwendet werden.

Begriff Definition
Anpassungsregel Eine Regel, die definiert, wann der Übergang von Standardzeit zu Sommerzeit und zurück von Sommerzeit zu Standardzeit eintritt. Jede Anpassungsregel verfügt über ein Anfangs- und Enddatum, das definiert, wann die Regel vorhanden ist (z. B. die Anpassungsregel ist vom 1. Januar 1986 bis zum 31. Dezember 2006), ein Delta (die Zeitspanne, um die sich die Standardzeit aufgrund der Anwendung der Anpassungsregel ändert), sowie Informationen zu dem spezifischen Datum und der Uhrzeit, zu dem die Übergänge während des Anpassungszeitraums auftreten sollen. Übergänge können entweder einer festen Regel oder einer flexiblen Regel folgen.
Mehrdeutige Zeitangaben Eine Uhrzeit, die zwei verschiedenen Zeiten in einer einzelnen Zeitzone zugeordnet werden kann. Es tritt auf, wenn die Uhrzeit wieder in der Zeit angepasst wird, z. B. während des Übergangs von der Sommerzeit einer Zeitzone zu ihrer Standardzeit. Wenn dieser Übergang z. B. an einem bestimmten Tag um 2:00 Uhr auftritt und die Zeit um 1:00 Uhr geändert wird, kann jedes Zeitintervall zwischen 1:00 Uhr und 1:59:59 Uhr als Standardzeit oder Sommerzeit interpretiert werden.
Feste Regel Eine Anpassungsregel, die ein bestimmtes Datum für den Übergang zu oder von Sommerzeit festlegt. Beispielsweise folgt ein Übergang von Sommerzeit zu Standardzeit, der jedes Jahr am 25. Oktober stattfindet, einer festen Anpassungsregel.
Schwimmende Regel Eine Anpassungsregel, die einen bestimmten Tag einer bestimmten Woche eines bestimmten Monats für den Übergang zu oder von Sommerzeit festlegt. Beispielsweise folgt ein Übergang von Standardzeit zu Sommerzeit, der am dritten Sonntag im März stattfindet, einer flexiblen Anpassungsregel.
Ungültige Zeit Eine nicht vorhandene Zeit, die ein Artefakt des Übergangs von Standardzeit zu Sommerzeit ist. Es tritt auf, wenn die Uhrzeit vorwärts angepasst wird, z. B. während des Übergangs von der Standardzeit einer Zeitzone zu ihrer Sommerzeit. Wenn dieser Übergang z. B. an einem bestimmten Tag um 2:00 Uhr erfolgt und die Zeit auf 3:00 Uhr geändert wird, ist jedes Zeitintervall zwischen 2:00 Uhr und 2:59:59 Uhr ungültig.
Übergangszeit Informationen zu einer bestimmten Zeitänderung, z. B. die Änderung von Sommerzeit in Standardzeit oder umgekehrt, in einer bestimmten Zeitzone.

Zeitzonen und die TimeZoneInfo-Klasse

In .NET stellt ein TimeZoneInfo Objekt eine Zeitzone dar. Die TimeZoneInfo Klasse enthält eine GetAdjustmentRules Methode, die ein Array von TimeZoneInfo.AdjustmentRule Objekten zurückgibt. Jedes Element dieses Arrays enthält Informationen zum Übergang zu und von Sommerzeit für einen bestimmten Zeitraum. (Bei Zeitzonen, die die Sommerzeit nicht unterstützen, gibt die Methode ein leeres Array zurück.) Jedes TimeZoneInfo.AdjustmentRule Objekt verfügt über eine DaylightTransitionStart und eine DaylightTransitionEnd Eigenschaft, die das bestimmte Datum und die Uhrzeit des Übergangs zu und von Sommerzeit definiert. Die IsFixedDateRule-Eigenschaft gibt an, ob der Übergang fest oder variabel ist.

.NET basiert auf Zeitzoneninformationen, die vom Windows-Betriebssystem bereitgestellt und in der Registrierung gespeichert sind. Aufgrund der Anzahl der Erdzeitzonen werden nicht alle vorhandenen Zeitzonen in der Registrierung dargestellt. Da es sich bei der Registrierung um eine dynamische Struktur handelt, können vordefinierte Zeitzonen hinzugefügt oder daraus entfernt werden. Schließlich enthält die Registrierung keine historischen Zeitzonendaten. In Windows XP enthält die Registrierung beispielsweise Nur Daten zu einer einzigen Gruppe von Zeitzonenanpassungen. Windows Vista unterstützt dynamische Zeitzonendaten. Dies bedeutet, dass eine einzelne Zeitzone mehrere Anpassungsregeln aufweisen kann, die für bestimmte Intervalle von Jahren gelten. Die meisten Zeitzonen, die in der Windows Vista-Registrierung definiert sind und Sommerzeit unterstützen, weisen jedoch nur ein oder zwei vordefinierte Anpassungsregeln auf.

Die Abhängigkeit der Klasse von der TimeZoneInfo Registrierung bedeutet, dass eine zeitzonenfähige Anwendung nicht sicher sein kann, dass eine bestimmte Zeitzone in der Registrierung definiert ist. Daher sollte der Versuch, eine bestimmte Zeitzone (außer der lokalen Zeitzone oder der Zeitzone, die UTC darstellt) zu instanziieren, mit einer Ausnahmebehandlung versehen werden. Es sollte auch eine Methode bereitstellen, mit der die Anwendung fortgesetzt werden kann, wenn ein erforderliches TimeZoneInfo Objekt nicht aus der Registrierung instanziiert werden kann.

Um das Fehlen einer erforderlichen Zeitzone zu behandeln, enthält die TimeZoneInfo Klasse eine CreateCustomTimeZone Methode, mit der Sie benutzerdefinierte Zeitzonen erstellen können, die in der Registrierung nicht gefunden werden. Ausführliche Informationen zum Erstellen einer benutzerdefinierten Zeitzone finden Sie unter Wie erstelle ich Zeitzonen ohne Anpassungsregeln? sowie Wie erstelle ich Zeitzonen mit Anpassungsregeln?. Darüber hinaus können Sie die ToSerializedString Methode verwenden, um eine neu erstellte Zeitzone in eine Zeichenfolge zu konvertieren und in einem Datenspeicher zu speichern (z. B. eine Datenbank, eine Textdatei, die Registrierung oder eine Anwendungsressource). Anschließend können Sie die FromSerializedString Methode verwenden, um diese Zeichenfolge wieder in ein TimeZoneInfo Objekt zu konvertieren. Ausführliche Informationen finden Sie unter So speichern Sie Zeitzonen in einer eingebetteten Ressource und So stellen Sie Zeitzonen aus einer eingebetteten Ressource wieder her.

Da jede Zeitzone durch einen Basisoffset von UTC sowie durch einen Offset von UTC gekennzeichnet ist, der alle vorhandenen Anpassungsregeln widerspiegelt, kann eine Zeit in einer Zeitzone problemlos in die Uhrzeit in einer anderen Zeitzone konvertiert werden. Zu diesem Zweck umfasst das TimeZoneInfo Objekt mehrere Konvertierungsmethoden, darunter:

  • ConvertTimeFromUtc, die UTC in die Uhrzeit in einer bestimmten Zeitzone konvertiert.

  • ConvertTimeToUtc, die die Uhrzeit in einer bestimmten Zeitzone in UTC konvertiert.

  • ConvertTime, wodurch die Uhrzeit in einer bestimmten Zeitzone in die Uhrzeit in einer anderen festgelegten Zeitzone konvertiert wird.

  • ConvertTimeBySystemTimeZoneId, die Zeitzonen-IDs (anstelle von TimeZoneInfo Objekten) als Parameter verwendet, um die Zeit in einer bestimmten Zeitzone in die Uhrzeit in einer anderen festgelegten Zeitzone zu konvertieren.

Ausführliche Informationen zum Konvertieren von Zeiten zwischen Zeitzonen finden Sie unter Konvertieren von Zeiten zwischen Zeitzonen.

Siehe auch