TimeZoneInfo.FindSystemTimeZoneById(String) Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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
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é).