Nota
L'accés a aquesta pàgina requereix autorització. Podeu provar d'iniciar la sessió o de canviar els directoris.
L'accés a aquesta pàgina requereix autorització. Podeu provar de canviar els directoris.
La forma más común de obtener un TimeZoneInfo objeto es recuperar información sobre él desde el Registro. Para obtener el objeto, llame al método static (Shared en Visual Basic) TimeZoneInfo.FindSystemTimeZoneById, que busca en el Registro. Controle las excepciones producidas por el método , especialmente la TimeZoneNotFoundException que se produce si la zona horaria no está definida en el registro.
Nota:
A partir de .NET 8, TimeZoneInfo.FindSystemTimeZoneById devuelve un objeto almacenado en TimeZoneInfo caché en lugar de crear una instancia de un nuevo objeto. Para obtener más información, vea FindSystemTimeZoneById no devuelve un nuevo objeto.
Ejemplo
El código siguiente recupera un TimeZoneInfo objeto que representa la zona horaria estándar del Este y muestra la hora estándar oriental que corresponde a la hora local.
DateTime timeNow = DateTime.Now;
try
{
TimeZoneInfo easternZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
DateTime easternTimeNow = TimeZoneInfo.ConvertTime(
timeNow,
TimeZoneInfo.Local,
easternZone
);
Console.WriteLine("{0} {1} corresponds to {2} {3}.",
timeNow,
TimeZoneInfo.Local.IsDaylightSavingTime(timeNow) ?
TimeZoneInfo.Local.DaylightName :
TimeZoneInfo.Local.StandardName,
easternTimeNow,
easternZone.IsDaylightSavingTime(easternTimeNow) ?
easternZone.DaylightName :
easternZone.StandardName);
}
// Handle exception
//
// As an alternative to simply displaying an error message, an alternate Eastern
// Standard Time TimeZoneInfo object could be instantiated here either by restoring
// it from a serialized string or by providing the necessary data to the
// CreateCustomTimeZone method.
catch (TimeZoneNotFoundException)
{
Console.WriteLine("The Eastern Standard Time Zone cannot be found on the local system.");
}
catch (InvalidTimeZoneException)
{
Console.WriteLine("The Eastern Standard Time Zone contains invalid or missing data.");
}
catch (SecurityException)
{
Console.WriteLine("The application lacks permission to read time zone information from the registry.");
}
catch (OutOfMemoryException)
{
Console.WriteLine("Not enough memory is available to load information on the Eastern Standard Time zone.");
}
// If we weren't passing FindSystemTimeZoneById a literal string, we also
// would handle an ArgumentNullException.
Dim timeNow As Date = Date.Now
Try
Dim easternZone As TimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time")
Dim easternTimeNow As Date = TimeZoneInfo.ConvertTime(timeNow, TimeZoneInfo.Local, easternZone)
Console.WriteLine("{0} {1} corresponds to {2} {3}.", _
timeNow, _
IIf(TimeZoneInfo.Local.IsDaylightSavingTime(timeNow), _
TimeZoneInfo.Local.DaylightName, TimeZoneInfo.Local.StandardName), _
easternTimeNow, _
IIf(easternZone.IsDaylightSavingTime(easternTimeNow), _
easternZone.DaylightName, easternZone.StandardName))
' Handle exception
'
' As an alternative to simply displaying an error message, an alternate Eastern
' Standard Time TimeZoneInfo object could be instantiated here either by restoring
' it from a serialized string or by providing the necessary data to the
' CreateCustomTimeZone method.
Catch e As TimeZoneNotFoundException
Console.WriteLine("The Eastern Standard Time Zone cannot be found on the local system.")
Catch e As InvalidTimeZoneException
Console.WriteLine("The Eastern Standard Time Zone contains invalid or missing data.")
Catch e As SecurityException
Console.WriteLine("The application lacks permission to read time zone information from the registry.")
Catch e As OutOfMemoryException
Console.WriteLine("Not enough memory is available to load information on the Eastern Standard Time zone.")
' If we weren't passing FindSystemTimeZoneById a literal string, we also
' would handle an ArgumentNullException.
End Try
El TimeZoneInfo.FindSystemTimeZoneById parámetro único del método es el identificador de la zona horaria que desea recuperar, que corresponde a la propiedad del TimeZoneInfo.Id objeto. El identificador de zona horaria es un campo clave que identifica de forma única la zona horaria. Aunque la mayoría de las claves son relativamente cortas, el identificador de zona horaria es relativamente largo. En la mayoría de los casos, su valor corresponde a la StandardName propiedad de un TimeZoneInfo objeto , que se usa para proporcionar el nombre de la hora estándar de la zona horaria. Sin embargo, hay excepciones. La mejor manera de asegurarse de que proporciona un identificador válido es enumerar las zonas horarias disponibles en el sistema y anotar los identificadores de las zonas horarias presentes en ellos. Para obtener un ejemplo, vea Cómo: Enumerar zonas horarias presentes en un equipo. El artículo Búsqueda de las zonas horarias definidas en un sistema local también contiene una lista de identificadores de zona horaria seleccionados.
Si se encuentra la zona horaria, el método devuelve su TimeZoneInfo objeto . Si no se encuentra la zona horaria, el método lanza una TimeZoneNotFoundException excepción. Si se encuentra la zona horaria pero sus datos están dañados o incompletos, el método lanza una excepción InvalidTimeZoneException.
Si la aplicación se basa en una zona horaria que debe estar presente, primero debe llamar al FindSystemTimeZoneById método para recuperar la información de zona horaria del registro. Si se produce un error en la llamada al método, el controlador de excepciones debe crear una nueva instancia de la zona horaria o volver a crearla deserializando un objeto serializado TimeZoneInfo . Consulte How to: Restore time zones from an embedded resource (Cómo: Restaurar zonas horarias desde un recurso incrustado ) para obtener un ejemplo.