Sdílet prostřednictvím


Postupy: Vytvoření instance objektu TimeZoneInfo

Nejběžnější způsob vytvoření instance objektu TimeZoneInfo je vyhledání informací objektu z registru. Toto téma popisuje, jak vytvořit instanci objektu TimeZoneInfo z registru místního systému.

Vytvoření instance objektu TimeZoneInfo

  1. Deklarujte objekt TimeZoneInfo.

  2. Volejte metodu static (Shared v jazyce Visual Basic) TimeZoneInfo.FindSystemTimeZoneById.

  3. Zpracujte jakékoli výjimky vyvolané metodou, zejména TimeZoneNotFoundException, která je vyvolána pokud časové pásmo není definováno v registru.

Příklad

Následující kód načte objekt TimeZoneInfo, který představuje standardní východní časové pásmo a zobrazí východní standardní čas, který odpovídá místnímu času.

Dim timeNow As Date = Date.Now
Try
   Dim easternZone As TimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time")
   Dim easternTimeNow As Date = TimeZoneInfo.ConvertTime(timeNow, TimeZoneInfo.Local, easternZone)
   Console.WriteLine("{0} {1} corresponds to {2} {3}.", _
                     timeNow, _
                     IIf(TimeZoneInfo.Local.IsDaylightSavingTime(timeNow), _
                         TimeZoneInfo.Local.DaylightName, TimeZoneInfo.Local.StandardName), _
                     easternTimeNow, _
                     IIf(easternZone.IsDaylightSavingTime(easternTimeNow), _
                         easternZone.DaylightName, easternZone.StandardName))
' Handle exception
'
' As an alternative to simply displaying an error message, an alternate Eastern
' Standard Time TimeZoneInfo object could be instantiated here either by restoring
' it from a serialized string or by providing the necessary data to the
' CreateCustomTimeZone method.
Catch e As TimeZoneNotFoundException
   Console.WriteLine("The Eastern Standard Time Zone cannot be found on the local system.")
Catch e As InvalidTimeZoneException
   Console.WriteLine("The Eastern Standard Time Zone contains invalid or missing data.")   
Catch e As SecurityException
   Console.WriteLine("The application lacks permission to read time zone information from the registry.")
Catch e As OutOfMemoryException
   Console.WriteLine("Not enough memory is available to load information on the Eastern Standard Time zone.")
' If we weren't passing FindSystemTimeZoneById a literal string, we also 
' would handle an ArgumentNullException.
End Try
DateTime timeNow = DateTime.Now;
try
{
   TimeZoneInfo easternZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
   DateTime easternTimeNow = TimeZoneInfo.ConvertTime(timeNow, TimeZoneInfo.Local, 
                                                   easternZone);
   Console.WriteLine("{0} {1} corresponds to {2} {3}.",
                     timeNow, 
                     TimeZoneInfo.Local.IsDaylightSavingTime(timeNow) ?
                               TimeZoneInfo.Local.DaylightName : 
                               TimeZoneInfo.Local.StandardName,
                     easternTimeNow, 
                     easternZone.IsDaylightSavingTime(easternTimeNow) ?
                                 easternZone.DaylightName : 
                                 easternZone.StandardName);
}
// Handle exception
//
// As an alternative to simply displaying an error message, an alternate Eastern
// Standard Time TimeZoneInfo object could be instantiated here either by restoring
// it from a serialized string or by providing the necessary data to the
// CreateCustomTimeZone method.
catch (TimeZoneNotFoundException)
{
   Console.WriteLine("The Eastern Standard Time Zone cannot be found on the local system.");
}  
catch (InvalidTimeZoneException)
{
   Console.WriteLine("The Eastern Standard Time Zone contains invalid or missing data.");
}
catch (SecurityException)
{
   Console.WriteLine("The application lacks permission to read time zone information from the registry.");
}
catch (OutOfMemoryException)
{
   Console.WriteLine("Not enough memory is available to load information on the Eastern Standard Time zone.");
}
// If we weren't passing FindSystemTimeZoneById a literal string, we also 
// would handle an ArgumentNullException.

Jediný parametr metody TimeZoneInfo.FindSystemTimeZoneById je identifikátor časového pásma, které chcete načíst, který odpovídá vlastnosti objektu TimeZoneInfo.Id. Identifikátor časového pásma je pole s klíčem, které jednoznačně identifikuje časové pásmo. Zatímco většina klíčů je poměrně krátkých, identifikátor časového pásma je relativně dlouhý. Ve většině případů jeho hodnota odpovídá vlastnosti StandardName objektu TimeZoneInfo, který slouží k poskytování názvu standardnído času od časového pásma. Existují však výjimky. Nejlepším způsobem abyste se ujistili, že je jste zadali platný identifikátor je provést výčet dostupných časových pásem v systému a poznamenat si identifikátory v jejich časovém pásmu. Pro ilustrace viz: Postupy: Výčet časových pásem přednastavených v počítači. Téma Zjištění časových pásem definovaných na místním systému také obsahuje seznam vybraných identifikátorů časových pásem.

Pokud je časové pásmo nalezeno, vrátí metoda jeho objekt TimeZoneInfo. Pokud časové pásmo není nalezeno, vyvolá metoda TimeZoneNotFoundException. Pokud je časové pásmo nalezeno, ale jeho data jsou poškozena nebo neúplná, vyvolá metoda InvalidTimeZoneException.

Pokud aplikace závisí na časovém pásmu, které musí být současné, měli byste nejprve volat metodu FindSystemTimeZoneById pro načtení informace o časovém pásmu z registru. Pokud selže volání metody, vaše obslužná rutina výjimky by poté měla vytvořit novou instanci časového pásma nebo jej znovu vytvořit pomocí deserializace serializovaného objektu TimeZoneInfo. Příklad naleznete v tématu Postupy: Obnovení časových pásem z integrovaného zdroje.

Probíhá kompilace kódu

Tento příklad vyžaduje:

  • Že bude do projektu přidán odkaz na System.Core.dll.

  • Že obor názvů System bude importován příkazem using (povinné v kódu jazyka C#).

Viz také

Úkoly

Postupy: Přístup k předdefinovaných objektům místních časových zón a zóny UTC

Koncepty

Zjištění časových pásem definovaných na místním systému

Další zdroje

Data, časy a časových pásem