Compartir a través de


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)

  1. Utilice la propiedad TimeZoneInfo.Utc static (Shared en Visual Basic) para obtener acceso a la hora universal coordinada.

  2. 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

  1. Utilice la propiedad TimeZoneInfo.Local static (Shared en Visual Basic) para obtener acceso a la zona horaria del sistema local.

  2. 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

Otros recursos

Fechas, horas y zonas horarias