TimeZoneInfo.FindSystemTimeZoneById(String) Método

Definição

Retorna um TimeZoneInfo objeto com base em seu identificador.

public:
 static TimeZoneInfo ^ FindSystemTimeZoneById(System::String ^ id);
public static TimeZoneInfo FindSystemTimeZoneById (string id);
static member FindSystemTimeZoneById : string -> TimeZoneInfo
Public Shared Function FindSystemTimeZoneById (id As String) As TimeZoneInfo

Parâmetros

id
String

O identificador do fuso horário, que corresponde à propriedade Id.

Retornos

Um objeto cujo identificador é o valor do parâmetro id.

Exceções

O sistema não tem memória suficiente para manter informações sobre o fuso horário.

O parâmetro id é null.

O identificador de fuso horário especificado por id não foi encontrado. Isso significa que um identificador de fuso horário cujo nome corresponde ao id não existe ou que o identificador existe, mas não contém nenhum dado de fuso horário.

O processo não tem as permissões necessárias para ler a partir da chave do Registro que contém as informações de fuso horário.

O identificador de fuso horário foi encontrado, mas os dados do Registro estão corrompidos.

Exemplos

O exemplo a seguir usa o FindSystemTimeZoneById método para recuperar o fuso horário padrão de Tóquio. Esse TimeZoneInfo objeto é então usado para converter a hora local para a hora em Tóquio e para determinar se é Hora Padrão de Tóquio ou Horário de Verão de Tóquio.

using System;

public class Example
{
   public static void Main()
   {
      // Get time in local time zone 
      DateTime thisTime = DateTime.Now;
      Console.WriteLine("Time in {0} zone: {1}", TimeZoneInfo.Local.IsDaylightSavingTime(thisTime) ?
                        TimeZoneInfo.Local.DaylightName : TimeZoneInfo.Local.StandardName, thisTime);
      Console.WriteLine("   UTC Time: {0}", TimeZoneInfo.ConvertTimeToUtc(thisTime, TimeZoneInfo.Local));
      // Get Tokyo Standard Time zone
      TimeZoneInfo tst = TimeZoneInfo.FindSystemTimeZoneById("Tokyo Standard Time");
      DateTime tstTime = TimeZoneInfo.ConvertTime(thisTime, TimeZoneInfo.Local, tst);      
      Console.WriteLine("Time in {0} zone: {1}", tst.IsDaylightSavingTime(tstTime) ?
                        tst.DaylightName : tst.StandardName, tstTime);
      Console.WriteLine("   UTC Time: {0}", TimeZoneInfo.ConvertTimeToUtc(tstTime, tst));
   }
}
// The example displays output like the following when run on a system in the
// U.S. Pacific Standard Time zone:
//       Time in Pacific Standard Time zone: 12/6/2013 10:57:51 AM
//          UTC Time: 12/6/2013 6:57:51 PM
//       Time in Tokyo Standard Time zone: 12/7/2013 3:57:51 AM
//          UTC Time: 12/6/2013 6:57:51 PM
open System

// Get time in local time zone 
let thisTime = DateTime.Now
printfn $"Time in {if TimeZoneInfo.Local.IsDaylightSavingTime thisTime then TimeZoneInfo.Local.DaylightName else TimeZoneInfo.Local.StandardName} zone: {thisTime}"
printfn $"   UTC Time: {TimeZoneInfo.ConvertTimeToUtc(thisTime, TimeZoneInfo.Local)}"
// Get Tokyo Standard Time zone
let tst = TimeZoneInfo.FindSystemTimeZoneById "Tokyo Standard Time"
let tstTime = TimeZoneInfo.ConvertTime(thisTime, TimeZoneInfo.Local, tst)      
printfn $"Time in {if tst.IsDaylightSavingTime tstTime then tst.DaylightName else tst.StandardName} zone: {tstTime}"
printfn $"   UTC Time: {TimeZoneInfo.ConvertTimeToUtc(tstTime, tst)}"
// The example displays output like the following when run on a system in the
// U.S. Pacific Standard Time zone:
//       Time in Pacific Standard Time zone: 12/6/2013 10:57:51 AM
//          UTC Time: 12/6/2013 6:57:51 PM
//       Time in Tokyo Standard Time zone: 12/7/2013 3:57:51 AM
//          UTC Time: 12/6/2013 6:57:51 PM
Module Example
   Public Sub Main()
      ' Get time in local time zone 
      Dim thisTime As Date = Date.Now
      Console.WriteLine("Time in {0} zone: {1}", IIf(TimeZoneInfo.Local.IsDaylightSavingTime(thisTime), 
                        TimeZoneInfo.Local.DaylightName, TimeZoneInfo.Local.StandardName), thisTime)
      Console.WriteLine("   UTC Time: {0}", TimeZoneInfo.ConvertTimeToUtc(thisTime, TimeZoneInfo.Local))
      ' Get Tokyo Standard Time zone
      Dim tst As TimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Tokyo Standard Time")
      Dim tstTime As Date = TimeZoneInfo.ConvertTime(thisTime, TimeZoneInfo.Local, tst)      
      Console.WriteLine("Time in {0} zone: {1}", IIf(tst.IsDaylightSavingTime(tstTime), 
                        tst.DaylightName, tst.StandardName), tstTime)
      Console.WriteLine("   UTC Time: {0}", TimeZoneInfo.ConvertTimeToUtc(tstTime, tst))
   End Sub
End Module
' The example displays output like the following when run on a system in the U.S.
' Pacific Standard Time zone:
'    Time in Pacific Standard Time zone: 12/6/2013 10:57:51 AM
'       UTC Time: 12/6/2013 6:57:51 PM
'    Time in Tokyo Standard Time zone: 12/7/2013 3:57:51 AM
'       UTC Time: 12/6/2013 6:57:51 PM

Comentários

O id parâmetro deve corresponder exatamente ao identificador do fuso horário em comprimento, mas não no caso, para que uma correspondência bem-sucedida ocorra; ou seja, a comparação de id com identificadores de fuso horário não diferencia maiúsculas de minúsculas. Se você quiser recuperar objetos de fuso horário com base em correspondências parciais, poderá escrever procedimentos personalizados que funcionam com a coleção somente leitura de TimeZoneInfo objetos retornados pelo GetSystemTimeZones método .

Em sistemas Windows, FindSystemTimeZoneById tenta corresponder id aos nomes de subchave do branch HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Time Zones do registro. No Linux e no macOS, ele usa informações de fuso horário disponíveis na Biblioteca de UTI. Se o registro ou a biblioteca não tiver as informações do fuso horário desejado, você poderá criar um fuso horário específico chamando uma das sobrecargas do CreateCustomTimeZone método ou chamando FromSerializedString para desserializar um TimeZoneInfo objeto que representa o fuso horário necessário. No entanto, os fusos horários criados por essas chamadas de método não são tempo definido pelo sistema e não podem ser recuperados usando o FindSystemTimeZoneById método . Esses fusos horários personalizados só podem ser acessados por meio da referência de objeto retornada pela chamada de CreateCustomTimeZone método ou FromSerializedString .

No .NET 7 e em versões anteriores, esse método retorna uma nova TimeZoneInfo instância para cada chamada de método. Isso pode afetar o desempenho em aplicativos que chamam o FindSystemTimeZoneById método repetidamente com o mesmo identificador. (No .NET 8 e versões posteriores, esse método sempre retorna uma instância armazenada TimeZoneInfo em cache.)

Aplica-se a

Confira também