TimeZoneInfo.FindSystemTimeZoneById(String) Método

Definição

Devolve um TimeZoneInfo objeto com base no 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 à Id propriedade.

Devoluções

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

Exceções

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

O id parâmetro é null.

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

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

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

Exemplos

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

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

Observações

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

Em sistemas Windows, FindSystemTimeZoneById tenta associar id aos nomes de subchave do ramo HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Time Zones do registo. A partir de .NET 6, Windows sistemas também suportam identificadores de fusos horários IANA (como "America/Los_Angeles" ou "Pacific/Auckland"), proporcionando resolução de fusos horários entre plataformas. Os IDs IANA são suportados no Windows apenas se o NLS não estiver ativado e o modo invariante à globalização não estiver ativado. No Linux e macOS, utiliza a informação dos fusos horários disponível na Biblioteca da UCI. Se o registo ou a biblioteca não tiverem a informação para o fuso horário desejado, pode criar um fuso horário específico chamando uma das sobrecargas do CreateCustomTimeZone método ou chamando FromSerializedString para desserializar um TimeZoneInfo objeto que represente o fuso horário necessário. No entanto, os fusos horários criados por estas chamadas de método não são tempo definido pelo sistema e não podem ser recuperados usando o FindSystemTimeZoneById método. Estes fusos horários personalizados só podem ser acedidos através da referência ao objeto devolvida pela CreateCustomTimeZone chamada de método ou FromSerializedString .

Em versões .NET 7 e anteriores, este método devolve uma nova instância TimeZoneInfo para cada chamada de método. Isto pode afetar o desempenho em aplicações que chamam o FindSystemTimeZoneById método repetidamente com o mesmo identificador. (Em versões .NET 8 e posteriores, este método devolve sempre uma instância TimeZoneInfo em cache.)

Aplica-se a

Ver também