Partilhar via


Como: Instanciar um objeto TimeZoneInfo

A maneira mais comum para instanciar um objeto TimeZoneInfo é recuperar informações sobre ele a partir do Registro. Este tópico aborda como instanciar um objeto TimeZoneInfo a partir do registro do sistema local.

Instanciar um Objeto TimeZoneInfo

  1. Declare um objeto TimeZoneInfo.

  2. Execute o static (Shared no Visual Basic) métodoTimeZoneInfo.FindSystemTimeZoneById.

  3. Manipule as exceções geradas pelo método, particularmente a TimeZoneNotFoundException que é gerada se a zona de tempo não é definida no registro.

Exemplo

O código a seguir recupera um TimeZoneInfo o objeto que representa o fuso horário padrão oriental e exibe a hora padrão do Leste dos EUA que corresponde ao horário local.

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.

O único parâmetro do método TimeZoneInfo.FindSystemTimeZoneById é o identificador da zona de tempo que você deseja recuperar, que corresponde a propriedade TimeZoneInfo.Id do objeto. O identificador da zona de tempo é um campo chave que identifica de forma única a zona de tempo. Enquanto a maioria das chaves são relativamente curto, o identificador de fuso horário é comparativamente longo. Na maioria dos casos, seu valor corresponde do StandardName propriedade de um TimeZoneInfo o objeto, que é usado para fornecer o nome do fuso horário padrão. Entretanto, há algumas exceções. A melhor maneira de certificar-se que você está fornecendo um identificador válido é enumerar as zonas de tempo disponíveis no seu sistema e observar os identificadores de zonas de tempo presentes neles. Para obter uma ilustração, consulte Como: Enumerar os fusos horários presentes em um computador.. O tópico Localizando as Zonas de Tempo Definidas em um Sistema Local também contém uma lista dos identificadores de zonas de tempo selecionados.

Se a zona de tempo for encontrada, o método retorna o seu objeto TimeZoneInfo. Se a zona de tempo não for encontrada, o método gera uma TimeZoneNotFoundException. Se a zona de tempo for encontrada, mas seus dados estão corrompidos ou incompletos, o método gera uma InvalidTimeZoneException.

Se o seu aplicativo se basear em uma zona de tempo que deve estar presente, primeiro você deve chamar o método FindSystemTimeZoneById para recuperar as informações da zona de tempo a partir do registro. Se a chamada de método falhar, o manipulador de exceção deve ou criar uma nova instância da zona de tempo ou recriá-la desserializando um objeto TimeZoneInfo serializado. Consulte Como: Restaurar os fusos horários de um recurso incorporado para um exemplo.

Compilando o código

Este exemplo requer:

  • Que uma referência a System.Core.dll seja adicionada ao projeto.

  • Que o namespace System seja importado com a instrução using (necessária em código C#).

Consulte também

Tarefas

Como: Acessar o UTC predefinido e objetos de fuso horário Local

Conceitos

Localizando as Zonas de Tempo Definidas em um Sistema Local

Outros recursos

Datas, horas e fusos horários