Cómo: Obtener acceso a los objetos de zona horaria local y UTC predefinidos
Actualización: noviembre 2007
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.Utcstatic (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.Localstatic (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