Übersicht über Zeitzonen
Die TimeZoneInfo-Klasse vereinfacht das Erstellen von zeitzonenfähigen Anwendungen. Die TimeZone-Klasse unterstützt die Arbeit mit der lokalen Zeitzone und koordinierter Weltzeit (UTC). Die TimeZoneInfo-Klasse unterstützt sowohl diese Zonen als auch alle Zeitzonen, in denen Informationen in der Registrierung vordefiniert sind. Sie können auch TimeZoneInfo verwenden, um benutzerdefinierte Zeitzonen zu definieren, zu denen im System keine Daten gespeichert sind.
Grundlagen zu Zeitzonen
Eine Zeitzone ist eine geografische Region, in der die gleiche Zeit verwendet wird. In der Regel, aber nicht immer, besteht zwischen angrenzenden Zeitzonen ein Zeitunterschied von einer Stunde. Die Zeit in allen Zeitzonen weltweit kann als Abweichung von der koordinierten Weltzeit (Coordinated Universal Time, UTC) ausgedrückt werden.
Viele Zeitzonen weltweit unterstützen die 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 auf und von Standardzeit werden als Anpassungsregeln bezeichnet.
Die Umstellung auf Sommerzeit und zurück auf Standardzeit 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 beispielsweise die Umstellung von Sommerzeit auf Standardzeit, 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 beispielsweise eine Umstellung von Standardzeit 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 anomalen 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 Standardzeit auf Sommerzeit entstanden ist. Wenn dieser Übergang z. B. an einem bestimmten Tag um 2:00 Uhr erfolgt und bewirkt, dass sich die Uhrzeit auf 3:00 Uhr ändert, ist jedes Zeitintervall zwischen 2:00 Uhr und 2:59:59 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 dieser Übergang beispielsweise an einem bestimmten Tag um 2:00 Uhr erfolgt und sich die Zeit auf 1:00 Uhr ändert, kann jedes Zeitintervall zwischen 1:00 Uhr und 1:59:59 Uhr entweder als Standardzeit oder 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 Standardzeit auf Sommerzeit und von Sommerzeit auf Standardzeit 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 Standardzeit 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 Zeitangaben | Eine Uhrzeit, die zwei verschiedenen Uhrzeiten in einer Zeitzone zugeordnet sein kann. Sie tritt auf, wenn die Uhrzeit zurückgestellt wird, beispielsweise während der Umstellung von Sommerzeit in einer Zeitzone auf Standardzeit. Wenn dieser Übergang beispielsweise an einem bestimmten Tag um 2:00 Uhr erfolgt und sich die Zeit auf 1:00 Uhr ändert, kann jedes Zeitintervall zwischen 1:00 Uhr und 1:59:59 Uhr entweder als Standardzeit oder Sommerzeit interpretiert werden. |
Feste Regel | Eine Anpassungsregel, mit der ein bestimmtes Datum für die Umstellung auf oder von Sommerzeit festgelegt wird. So folgt beispielsweise die Umstellung von Sommerzeit auf Standardzeit, die jedes Jahr am 25. Oktober stattfindet, einer festen Anpassungsregel. |
Bewegliche Regel | 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 beispielsweise eine Umstellung von Standardzeit 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 Standardzeit auf Sommerzeit entsteht. Sie tritt auf, wenn die Uhrzeit vorgestellt wird, beispielsweise bei der Umstellung von Standardzeit in einer Zeitzone auf Sommerzeit. Wenn dieser Übergang z. B. an einem bestimmten Tag um 2:00 Uhr erfolgt und bewirkt, dass sich die Uhrzeit auf 3:00 Uhr ändert, ist jedes Zeitintervall zwischen 2:00 Uhr und 2:59:59 Uhr ungültig. |
Umstellungszeit | Informationen über einen bestimmten Zeitwechsel in einer Zeitzone, z.B. bei der Umstellung von Sommerzeit auf Standardzeit oder umgekehrt. |
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 über den Übergang von und zur Sommerzeit für einen bestimmten Zeitraum. (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 - und eine DaylightTransitionEnd -Eigenschaft, die das jeweilige Datum und die Uhrzeit des Übergangs zur und von der Sommerzeit definiert. Die IsFixedDateRule -Eigenschaft gibt an, ob dieser Übergang fest oder unverankert ist.
.NET basiert auf Zeitzoneninformationen, die vom Windows-Betriebssystem bereitgestellt und in der Registrierung gespeichert sind. Aufgrund der Anzahl der Zeitzonen der Erde werden nicht alle vorhandenen Zeitzonen in der Registrierung dargestellt. Da es sich bei der Registrierung um eine dynamische Struktur handelt, können außerdem vordefinierte Zeitzonen hinzugefügt oder daraus entfernt werden. Schließlich enthält die Registrierung nicht unbedingt historische Zeitzonendaten. In Windows XP enthält die Registrierung z. B. nur Daten zu einem einzelnen Satz 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, verfügen jedoch nur über eine oder zwei vordefinierte Anpassungsregeln.
Die Abhängigkeit der Klasse TimeZoneInfo von der Registrierung bedeutet, dass eine zeitzonensensitive Anwendung nicht sicher sein kann, dass eine bestimmte Zeitzone in der Registrierung definiert ist. Daher sollte beim Versuch, eine bestimmte Zeitzone zu instanziieren (außer der lokalen Zeitzone oder der Zeitzone, die UTC darstellt), eine Ausnahmebehandlung verwendet werden. Zudem sollte eine Methode bereitgestellt werden, mit der die Anwendung fortfahren kann, wenn ein erforderliches TimeZoneInfo-Objekt nicht 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. Einzelheiten zum Erstellen einer benutzerdefinierten Zeitzone finden Sie unter How to: Zeitzonen ohne Anpassungsregeln erstellen und How to: Zeitzonen mit Anpassungsregeln erstellen. 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. Anschließend können Sie die FromSerializedString -Methode verwenden, um diese Zeichenfolge wieder in ein TimeZoneInfo -Objekt zu konvertieren. Weitere Informationen finden Sie unter Vorgehensweise: Speichern von Zeitzonen in einer eingebetteten Ressource und Vorgehensweise: Wiederherstellen von Zeitzonen aus einer eingebetteten Ressource.
Da jede Zeitzone durch eine Basisabweichung von UTC sowie durch eine Abweichung von UTC, mit der eine vorhandene Anpassungsregel wiedergegeben wird, gekennzeichnet ist, kann eine Uhrzeit in einer Zeitzone problemlos in die Uhrzeit in einer anderen Zeitzone konvertiert werden. Zu diesem Zweck enthält das TimeZoneInfo-Objekt mehrere Konvertierungsmethoden, einschließlich:
ConvertTimeFromUtc, wodurch UTC in die Uhrzeit in einer festgelegten Zeitzone konvertiert wird.
ConvertTimeToUtc, wodurch die Uhrzeit in einer bestimmten Zeitzone in UTC konvertiert wird.
ConvertTime, wodurch die Zeit in einer bestimmten Zeitzone in die Zeit in einer anderen festgelegten Zeitzone konvertiert wird.
ConvertTimeBySystemTimeZoneId, das Zeitzonenbezeichner (anstelle von TimeZoneInfo Objekten) als Parameter verwendet, um die Zeit in einer bestimmten Zeitzone in die Zeit in einer anderen festgelegten Zeitzone zu konvertieren.
Weitere Informationen über das Konvertieren von Uhrzeiten zwischen Zeitzonen finden Sie unter Konvertieren von Uhrzeiten zwischen Zeitzonen.