Cómo: Obtener acceso a los objetos de zona horaria local y UTC predefinidos
La clase TimeZoneInfo proporciona dos propiedades, Utc y Local, que dan al código acceso a los objetos de zona horaria predefinidos. En este tema se explica cómo obtener acceso a los objetos TimeZoneInfo devueltos por esas propiedades.
Para obtener acceso al objeto TimeZoneInfo de la hora universal coordinada (UTC)
Utilice la propiedad TimeZoneInfo.Utc static (Shared en Visual Basic) para obtener acceso a la hora universal coordinada.
En lugar de asignar el objeto TimeZoneInfo devuelto por la propiedad a una variable de objeto, continúe obteniendo acceso a la hora universal coordinada a través de la propiedad TimeZoneInfo.Utc.
Para obtener acceso a la zona horaria local
Utilice la propiedad TimeZoneInfo.Local static (Shared en Visual Basic) para obtener acceso a la zona horaria del sistema local.
En lugar de asignar el objeto TimeZoneInfo devuelto por la propiedad a una variable de objeto, continúe obteniendo acceso a la zona horaria local a través de la propiedad TimeZoneInfo.Local.
Ejemplo
El código siguiente utiliza las propiedades TimeZoneInfo.Local y TimeZoneInfo.Utc para convertir una hora de la zona horaria estándar del este, EE.UU. y Canadá, y para mostrar el nombre de la zona horaria en la consola.
' Create Eastern Standard Time value and TimeZoneInfo object
Dim estTime As Date = #01/01/2007 00:00:00#
Dim timeZoneName As String = "Eastern Standard Time"
Try
Dim est As TimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(timeZoneName)
' Convert EST to local time
Dim localTime As Date = TimeZoneInfo.ConvertTime(estTime, est, TimeZoneInfo.Local)
Console.WriteLine("At {0} {1}, the local time is {2} {3}.", _
estTime, _
est, _
localTime, _
IIf(TimeZoneInfo.Local.IsDaylightSavingTime(localTime), _
TimeZoneInfo.Local.DaylightName, _
TimeZoneInfo.Local.StandardName))
' Convert EST to UTC
Dim utcTime As Date = TimeZoneInfo.ConvertTime(estTime, est, TimeZoneInfo.Utc)
Console.WriteLine("At {0} {1}, the time is {2} {3}.", _
estTime, _
est, _
utcTime, _
TimeZoneInfo.Utc.StandardName)
Catch e As TimeZoneNotFoundException
Console.WriteLine("The {0} zone cannot be found in the registry.", _
timeZoneName)
Catch e As InvalidTimeZoneException
Console.WriteLine("The registry contains invalid data for the {0} zone.", _
timeZoneName)
End Try
// Create Eastern Standard Time value and TimeZoneInfo object
DateTime estTime = new DateTime(2007, 1, 1, 00, 00, 00);
string timeZoneName = "Eastern Standard Time";
try
{
TimeZoneInfo est = TimeZoneInfo.FindSystemTimeZoneById(timeZoneName);
// Convert EST to local time
DateTime localTime = TimeZoneInfo.ConvertTime(estTime, est, TimeZoneInfo.Local);
Console.WriteLine("At {0} {1}, the local time is {2} {3}.",
estTime,
est,
localTime,
TimeZoneInfo.Local.IsDaylightSavingTime(localTime) ?
TimeZoneInfo.Local.DaylightName :
TimeZoneInfo.Local.StandardName);
// Convert EST to UTC
DateTime utcTime = TimeZoneInfo.ConvertTime(estTime, est, TimeZoneInfo.Utc);
Console.WriteLine("At {0} {1}, the time is {2} {3}.",
estTime,
est,
utcTime,
TimeZoneInfo.Utc.StandardName);
}
catch (TimeZoneNotFoundException)
{
Console.WriteLine("The {0} zone cannot be found in the registry.",
timeZoneName);
}
catch (InvalidTimeZoneException)
{
Console.WriteLine("The registry contains invalid data for the {0} zone.",
timeZoneName);
}
Siempre debe obtener acceso a la zona horaria local mediante la propiedad TimeZoneInfo.Local en lugar de asignar la zona horaria local a una variable de objeto TimeZoneInfo. De igual manera, siempre debe obtener acceso a la hora universal coordinada mediante la propiedad TimeZoneInfo.Utc en lugar de asignar la zona UTC a una variable de objeto TimeZoneInfo. Así se evita que la variable de objeto TimeZoneInfo quede invalidada por una llamada al método TimeZoneInfo.ClearCachedData.
Compilar el código
Para este ejemplo se necesita:
Que se agregue al proyecto una referencia a System.Core.dll.
Que se importe el espacio de nombres System con la instrucción using (necesaria en código de C#).
Vea también
Tareas
Cómo: Crear instancias de un objeto TimeZoneInfo
Conceptos
Buscar las zonas horarias definidas en un sistema local