TimeZoneInfo.FindSystemTimeZoneById(String) Método

Definición

Devuelve un TimeZoneInfo objeto basado en su 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

Identificador de la zona horaria, que se corresponde con la propiedad Id.

Devoluciones

Objeto cuyo identificador es el valor del parámetro id.

Excepciones

El sistema no tiene suficiente memoria para almacenar información sobre la zona horaria.

El parámetro id es null.

No se encontró el identificador de zona horaria especificado por id. Esto significa que no existe ningún identificador de zona horaria cuyo nombre coincida con id, o que el identificador existe pero no contiene ningún dato de zona horaria.

El proceso no tiene los permisos necesarios para leer la clave del registro que contiene la información de zona horaria.

Se encontró el identificador de zona horaria, pero los datos del Registro están dañados.

Ejemplos

En el ejemplo siguiente se usa el FindSystemTimeZoneById método para recuperar la zona horaria estándar de Tokio. A continuación, este TimeZoneInfo objeto se usa para convertir la hora local a la hora de Tokio y determinar si es hora estándar de Tokio o hora de verano de Tokio.

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

Comentarios

El id parámetro debe corresponder exactamente al identificador de la zona horaria, pero no en caso de que se produzca una coincidencia correcta; es decir, la comparación de con los identificadores de id zona horaria no distingue mayúsculas de minúsculas. Si desea recuperar objetos de zona horaria basados en coincidencias parciales, puede escribir procedimientos personalizados que funcionen con la colección de solo lectura de TimeZoneInfo objetos devueltos por el GetSystemTimeZones método .

En los sistemas Windows, FindSystemTimeZoneById intenta coincidir id con los nombres de subclave de la rama HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Time Zones del Registro. En Linux y macOS, usa información de zona horaria disponible en la biblioteca de ICU. Si el Registro o la biblioteca no tienen la información de la zona horaria que desea, puede crear una zona horaria determinada llamando a una de las sobrecargas del CreateCustomTimeZone método o llamando FromSerializedString a para deserializar un TimeZoneInfo objeto que representa la zona horaria necesaria. Sin embargo, las zonas horarias creadas por estas llamadas de método no son la hora definida por el sistema y no se pueden recuperar mediante el FindSystemTimeZoneById método . Solo se puede acceder a estas zonas horarias personalizadas a través de la referencia de objeto devuelta por la llamada al CreateCustomTimeZone método o FromSerializedString .

En .NET 7 y versiones anteriores, este método devuelve una nueva TimeZoneInfo instancia para cada llamada de método. Esto podría afectar al rendimiento en las aplicaciones que llaman al FindSystemTimeZoneById método repetidamente con el mismo identificador. (En .NET 8 y versiones posteriores, este método siempre devuelve una instancia almacenada en TimeZoneInfo caché).

Se aplica a

Consulte también