Partilhar via


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

A classe TimeZoneInfofornece duas propriedades, Utc e Local, que dão acesso de código a objetos pré-definidos de zona de tempo. Este tópico discute como acessar os objetos TimeZoneInfo retornados por essas propriedades.

Para acessar o objeto TimeZoneInfo de Tempo Universal Coordenado (UTC)

  1. Use a propriedade static (Shared no Visual Basic) TimeZoneInfo.Utc para acessar o Tempo Universal Coordenado.

  2. Em vez de atribuir o objeto TimeZoneInfo retornado pela propriedade a uma variável de objeto, continue a acessar através da propriedade TimeZoneInfo.Utc do Tempo Universal Coordenado.

Para acessar a zona de tempo local

  1. Use a propriedade static (Shared no Visual Basic) TimeZoneInfo.Local para acessar a zona de tempo local do sistema.

  2. Em vez de atribuir o objeto TimeZoneInfo retornado pela propriedade a uma variável de objeto, continue a acessar através da propriedade TimeZoneInfo.Local do Tempo Universal Coordenado.

Exemplo

O código a seguir usa a TimeZoneInfo.Local e TimeZoneInfo.Utc Propriedades para converter o tempo a partir dos EUA e o padrão Oriental canadense fuso horário, bem como para exibir o nome do fuso horário para o console.

' Create Eastern Standard Time value and TimeZoneInfo object      
Dim estTime As Date = #01/01/2007 00:00:00#
Dim timeZoneName As String = "Eastern Standard Time"
Try
   Dim est As TimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(timeZoneName)

   ' Convert EST to local time
   Dim localTime As Date = TimeZoneInfo.ConvertTime(estTime, est, TimeZoneInfo.Local)
   Console.WriteLine("At {0} {1}, the local time is {2} {3}.", _
           estTime, _
           est, _
           localTime, _
           IIf(TimeZoneInfo.Local.IsDaylightSavingTime(localTime), _
               TimeZoneInfo.Local.DaylightName, _
               TimeZoneInfo.Local.StandardName))

   ' Convert EST to UTC
   Dim utcTime As Date = TimeZoneInfo.ConvertTime(estTime, est, TimeZoneInfo.Utc)
   Console.WriteLine("At {0} {1}, the time is {2} {3}.", _
           estTime, _
           est, _
           utcTime, _
           TimeZoneInfo.Utc.StandardName)
Catch e As TimeZoneNotFoundException
   Console.WriteLine("The {0} zone cannot be found in the registry.", _
                     timeZoneName)
Catch e As InvalidTimeZoneException
   Console.WriteLine("The registry contains invalid data for the {0} zone.", _
                     timeZoneName)
End Try
// Create Eastern Standard Time value and TimeZoneInfo object      
DateTime estTime = new DateTime(2007, 1, 1, 00, 00, 00);
string timeZoneName = "Eastern Standard Time";
try
{
   TimeZoneInfo est = TimeZoneInfo.FindSystemTimeZoneById(timeZoneName);

   // Convert EST to local time
   DateTime localTime = TimeZoneInfo.ConvertTime(estTime, est, TimeZoneInfo.Local);
   Console.WriteLine("At {0} {1}, the local time is {2} {3}.", 
           estTime, 
           est, 
           localTime, 
           TimeZoneInfo.Local.IsDaylightSavingTime(localTime) ?
                     TimeZoneInfo.Local.DaylightName : 
                     TimeZoneInfo.Local.StandardName);

   // Convert EST to UTC
   DateTime utcTime = TimeZoneInfo.ConvertTime(estTime, est, TimeZoneInfo.Utc);
   Console.WriteLine("At {0} {1}, the time is {2} {3}.", 
           estTime, 
           est, 
           utcTime, 
           TimeZoneInfo.Utc.StandardName);
}
catch (TimeZoneNotFoundException)
{
   Console.WriteLine("The {0} zone cannot be found in the registry.", 
                     timeZoneName);
}
catch (InvalidTimeZoneException)
{
   Console.WriteLine("The registry contains invalid data for the {0} zone.", 
                     timeZoneName);
}

Você sempre deve acessar a zona de tempo local através da propriedade TimeZoneInfo.Local em vez de atribuir a zona de tempo local a uma variável de objeto TimeZoneInfo. Da mesma forma, você deve sempre acessar o Tempo Universal Coordenado através da propriedade TimeZoneInfo.Utc em vez de atribuir a zona UTC a uma variável de objeto TimeZoneInfo. Isso impede que a variável do objeto TimeZoneInfo seja invalidada por uma chamada para o método TimeZoneInfo.ClearCachedData.

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: Instanciar um objeto TimeZoneInfo

Conceitos

Localizando as Zonas de Tempo Definidas em um Sistema Local

Outros recursos

Datas, horas e fusos horários