Übersicht über Zeitzonen
Aktualisiert: November 2007
Die TimeZoneInfo-Klasse vereinfacht die Erstellung von Anwendungen, die Zeitzonen unterstützen. Die TimeZone-Klasse ermöglicht die Arbeit mit der lokalen Zeitzone und der koordinierter Weltzeit (Coordinated Universal Time, UTC). Die TimeZoneInfo-Klasse unterstützt diese beiden Zonen sowie alle anderen Zeitzonen, für die Daten in der Registrierung vordefiniert sind. Sie können auch TimeZoneInfo zum Festlegen benutzerdefinierter Zeitzonen verwenden, für die im System noch keine Daten gespeichert sind.
Grundlagen zu Zeitzonen
Eine Zeitzone ist ein geografisches Gebiet, in dem eine einheitliche Zeit verwendet wird. In der Regel, jedoch nicht immer, besteht zwischen angrenzenden Zeitzonen ein Zeitunterschied von einer Stunde. Die Zeit einer beliebigen Zeitzone der Welt kann als Offset von der koordinierten Weltzeit (UTC) ausgedrückt werden.
Viele der Weltzeitzonen unterstützen Sommerzeit. Durch die Sommerzeit wird die größere Anzahl von Stunden mit Tageslicht besser ausgenutzt, indem die Uhrzeit im Frühjahr oder Frühsommer um eine Stunde vorgestellt und im Spätsommer oder Herbst wieder auf die Normalzeit zurückgestellt wird. Diese Zeitumstellung von und zurück zur Normalzeit wird als Anpassungsregeln bezeichnet.
Die Umstellung auf Sommerzeit und zurück auf Normalzeit in einer bestimmten Zeitzone kann entweder durch eine feste oder eine bewegliche Anpassungsregel definiert werden. Bei einer festen Anpassungsregel wird ein bestimmtes Datum festgelegt, an dem die Umstellung auf oder von Sommerzeit jedes Jahr erfolgt. So folgt zum Beispiel eine Umstellung von Sommerzeit auf Normalzeit, die jedes Jahr am 25. Oktober stattfindet, einer festen Anpassungsregel. Bewegliche Anpassungsregeln werden jedoch häufiger verwendet; hierbei wird ein bestimmter Tag einer bestimmten Woche eines bestimmten Monats für die Umstellung auf oder von Sommerzeit festgelegt. So folgt zum Beispiel eine Umstellung von Normalzeit auf Sommerzeit, die am dritten Sonntag im Monat März stattfindet, einer beweglichen Anpassungsregel.
Bei Zeitzonen, die Anpassungsregeln unterstützen, führt die Umstellung von und auf Sommerzeit zu zwei abweichenden Uhrzeiten: ungültige Uhrzeiten und mehrdeutige Uhrzeiten. Bei einer ungültigen Uhrzeit handelt es sich um eine nicht vorhandene Uhrzeit, die durch die Umstellung von Normalzeit auf Sommerzeit entstanden ist. Wenn die Umstellung zum Beispiel an einem bestimmten Tag um 2:00 Uhr erfolgt und die Uhrzeit in 3:00 Uhr geändert wird, ist jedes Zeitintervall zwischen 2:00 Uhr und 2:59:99 Uhr ungültig. Eine mehrdeutige Uhrzeit ist eine Zeit, die zwei verschiedenen Uhrzeiten in einer Zeitzone zugeordnet sein kann. Sie wird durch die Umstellung von Sommerzeit auf Standardzeit erzeugt. Wenn die Umstellung zum Beispiel an einem bestimmten Tag um 2:00 Uhr erfolgt und die Uhrzeit in 1:00 Uhr geändert wird, kann jedes Zeitintervall zwischen 1:00 Uhr und 1:59:99 Uhr entweder als Normalzeit oder als Sommerzeit interpretiert werden.
Zeitzonenterminologie
In der folgenden Tabelle sind Begriffe definiert, die bei der Arbeit mit Zeitzonen und bei der Entwicklung von Anwendungen, die Zeitzonen unterstützen, häufig verwendet werden.
Begriff |
Definition |
---|---|
Anpassungsregel |
Eine Regel, die definiert, wann die Umstellung von Normalzeit auf Sommerzeit und von Sommerzeit auf Normalzeit stattfindet. Jede Anpassungsregel verfügt über ein Anfangs- und ein Enddatum, die definieren, wann die Regel gültig ist (z. B. vom 1. Januar 1986 bis zum 31. Dezember 2006), ein Delta (die Zeit, um die sich die Normalzeit durch Anwendung der Anpassungsregel ändert) sowie Informationen über das Datum und die Uhrzeit, zu denen die Umstellungen während der Anwendung der Anpassungsregel stattfinden. Umstellungen können entweder einer festen oder einer beweglichen Anpassungsregel folgen. |
Mehrdeutige Zeit |
Eine Uhrzeit, die zwei verschiedenen Uhrzeiten in einer Zeitzone zugeordnet sein kann. Sie tritt auf, wenn die Uhrzeit zurückgestellt wird, beispielsweise bei der Umstellung von der Sommerzeit in einer Zeitzone auf die Standardzeit. Wenn die Umstellung zum Beispiel an einem bestimmten Tag um 2:00 Uhr erfolgt und die Uhrzeit in 1:00 Uhr geändert wird, kann jedes Zeitintervall zwischen 1:00 Uhr und 1:59:99 Uhr entweder als Normalzeit oder als Sommerzeit interpretiert werden. |
Feste Anpassungsregel |
Eine Anpassungsregel, mit der ein bestimmtes Datum für die Umstellung auf oder von Sommerzeit festgelegt wird. So folgt zum Beispiel eine Umstellung von Sommerzeit auf Normalzeit, die jedes Jahr am 25. Oktober stattfindet, einer festen Anpassungsregel. |
Bewegliche Anpassungsregel |
Eine Anpassungsregel, bei der ein bestimmter Tag einer bestimmten Woche eines bestimmten Monats für die Umstellung auf oder von Sommerzeit festgelegt wird. So folgt zum Beispiel eine Umstellung von Normalzeit auf Sommerzeit, die am dritten Sonntag im Monat März stattfindet, einer beweglichen Anpassungsregel. |
Ungültige Zeit |
Eine nicht vorhandene Zeit, die durch die Umstellung von Normalzeit auf Sommerzeit entsteht. Sie tritt auf, wenn die Uhrzeit vorgestellt wird, beispielsweise bei der Umstellung von der Normalzeit einer Zeitzone auf die Sommerzeit. Wenn die Umstellung zum Beispiel an einem bestimmten Tag um 2:00 Uhr erfolgt und die Uhrzeit in 3:00 Uhr geändert wird, ist jedes Zeitintervall zwischen 2:00 Uhr und 2:59:99 Uhr ungültig. |
Umstellungszeit |
Informationen über einem bestimmten Zeitwechsel in einer Zeitzone, z. B. bei der Umstellung von Sommerzeit auf Normalzeit oder umgekehrt. |
Zeitzonen und die TimeZoneInfo-Klasse
In .NET Framework stellt ein TimeZoneInfo-Objekt eine Zeitzone dar. Die TimeZoneInfo-Klasse schließt eine GetAdjustmentRules-Methode ein, die ein Array von TimeZoneInfo.AdjustmentRule-Objekten zurückgibt. Jedes Element dieses Arrays stellt Informationen über die Umstellung auf und von Sommerzeit für einen bestimmten Zeitraum zur Verfügung. (Für Zeitzonen, die keine Sommerzeit unterstützen, gibt die Methode ein leeres Array zurück.) Jedes TimeZoneInfo.AdjustmentRule-Objekt verfügt über eine DaylightTransitionStart-Eigenschaft und eine DaylightTransitionEnd-Eigenschaft, mit der ein bestimmtes Datum und eine Uhrzeit für die Umstellung auf und von Sommerzeit definiert werden. Die IsFixedDateRule-Eigenschaft gibt an, ob diese Umstellung fest oder beweglich ist.
.NET Framework benötigt Zeitzonendaten, die vom Windows-Betriebssystem zur Verfügung gestellt und in der Registrierung gespeichert werden. Aufgrund der großen Anzahl von Zeitzonen in der Welt sind nicht alle Zeitzonen in der Registrierung gespeichert. Außerdem können der Registrierung, da es sich hierbei um eine dynamische Struktur handelt, vordefinierte Zeitzonen hinzugefügt oder Zeitzonen daraus gelöscht werden. Die Registrierung enthält darüber hinaus nicht unbedingt historische Zeitzonendaten. In Windows XP enthält die Registrierung zum Beispiel nur Daten über einen einzelnen Satz von Zeitzonenanpassungen. Windows Vista unterstützt dynamische Zeitzonendaten; dies bedeutet, dass eine einzelne Zeitzone über mehrere Anpassungsregeln verfügen kann, die sich auf bestimmte Jahresintervalle beziehen. Die meisten Zeitzonen, die in der Registrierung von Windows Vista definiert sind und Sommerzeit unterstützen, verfügen jedoch nur über eine oder zwei vordefinierte Anpassungsregeln.
Da die TimeZoneInfo-Klasse von der Registrierung abhängig ist, kann eine Anwendung, die Zeitzonen unterstützt, nicht davon ausgehen, dass eine bestimmte Zeitzone in der Registrierung definiert ist. Daher muss beim Versuch, eine bestimmte Zeitzone (außer der lokalen Zeitzone oder der Zeitzone, die UTC darstellt) zu instanziieren, eine Ausnahmebehandlung verwendet werden. Außerdem sollte eine Methode zur Verfügung stehen, die der Anwendung das Fortfahren ermöglicht, wenn ein erforderliches TimeZoneInfo-Objekt nicht aus der Registrierung instanziiert werden kann.
Um das Fehlen einer erforderlichen Zeitzone zu behandeln, umfasst die TimeZoneInfo-Klasse eine CreateCustomTimeZone-Methode, die Sie zum Erstellen von benutzerdefinierten, nicht in der Registrierung vorhandenen Zeitzonen verwenden können. Ausführliche Informationen über das Erstellen einer benutzerdefinierten Zeitzone finden Sie unter Gewusst wie: Erstellen von Zeitzonen ohne Anpassungsregeln und unter Gewusst wie: Erstellen von 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 (z. B. eine Datenbank, eine Textdatei, die Registrierung oder eine Anwendungsressource) zu speichern. Sie können dann die FromSerializedString-Methode verwenden, um diese Zeichenfolge zurück in ein TimeZoneInfo-Objekt zu konvertieren. Ausführliche Informationen finden Sie unter Gewusst wie: Speichern von Zeitzonen in einer eingebetteten Ressource und unter Gewusst wie: Wiederherstellen von Zeitzonen aus einer eingebetteten Ressource.
Da jede Zeitzone durch einen Basisoffset von UTC sowie durch einen UTC-Offset, der möglicherweise vorhandene Anpassungsregeln in Betracht zieht, gekennzeichnet ist, kann eine Uhrzeit in einer Zeitzone auf einfache Weise in die Uhrzeit einer anderen Zeitzone konvertiert werden. Für diesen Zweck schließt das TimeZoneInfo-Objekt mehrere Konvertierungsmethoden ein, einschließlich:
ConvertTimeFromUtc, mit der UTC in die Uhrzeit in einer festgelegten Zeitzone konvertiert wird.
ConvertTimeToUtc, mit der die Uhrzeit in einer festgelegten Zeitzone in UTC konvertiert wird.
ConvertTime, mit der die Uhrzeit einer festgelegten Zeitzone in die Uhrzeit einer anderen festgelegten Zeitzone konvertiert wird.
ConvertTimeBySystemTimeZoneId, die Zeitzonenbezeichner (statt TimeZoneInfo-Objekte) als Parameter zum Konvertieren der Uhrzeit einer festgelegten Zeitzone in die Uhrzeit einer anderen festgelegten Zeitzone verwendet.
Ausführliche Informationen über das Konvertieren von Uhrzeiten zwischen Zeitzonen finden Sie unter Konvertieren von Uhrzeiten zwischen Zeitzonen.