Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La TimeZoneInfo clase simplifica la creación de aplicaciones compatibles con zona horaria. La TimeZone clase admite el trabajo con la zona horaria local y la hora universal coordinada (UTC). La TimeZoneInfo clase admite ambas zonas, así como cualquier zona horaria sobre qué información está predefinida en el registro. También puede usar TimeZoneInfo para definir zonas horarias personalizadas sobre las que el sistema no tiene información.
Aspectos básicos de la zona horaria
Una zona horaria es una región geográfica en la que se usa la misma hora. Normalmente, pero no siempre, las zonas horarias adyacentes están separadas por una hora. La hora en cualquiera de las zonas horarias del mundo se puede expresar como un desplazamiento de la hora universal coordinada (UTC).
Muchas de las zonas horarias del mundo admiten el horario de verano. El horario de verano intenta maximizar las horas de verano al avanzar el tiempo en una hora en la primavera o el verano temprano, y volver a la hora normal (o estándar) en el verano o otoño. Estos cambios en y desde el momento estándar se conocen como reglas de ajuste.
La transición a y desde el horario de verano en una zona horaria determinada se puede definir mediante una regla de ajuste fija o flotante. Una regla de ajuste fija establece una fecha determinada en la que se produce la transición a o desde el horario de verano cada año. Por ejemplo, una transición del horario de verano a la hora estándar que se produce cada año el 25 de octubre sigue una regla de ajuste fija. Mucho más común son las reglas de ajuste flotante, que establecen un día determinado de una semana determinada de un mes determinado para la transición a o desde el horario de verano. Por ejemplo, una transición del horario estándar al horario de verano que se produce el tercer domingo de marzo sigue una regla de ajuste flotante.
En el caso de las zonas horarias que admiten reglas de ajuste, la transición a y desde el horario de verano crea dos tipos de horas anómalas: horas no válidas y horas ambiguas. Una hora no válida es una hora inexistente creada por la transición del horario estándar al horario de verano. Por ejemplo, si esta transición se produce en un día determinado a las 2:00 a.m. y hace que la hora cambie a 3:00 A.M., cada intervalo de tiempo entre las 2:00 A.M. y las 2:59:59 A.M. no es válido. Una hora ambigua es una hora que se puede asignar a dos veces diferentes en una sola zona horaria. Se crea mediante la transición del horario de verano a la hora estándar. Por ejemplo, si esta transición se produce en un día determinado a las 2:00 A.M. y hace que la hora cambie a 1:00 A.M., cada intervalo de tiempo entre las 1:00 A.M. y las 1:59:59 A.M. se puede interpretar como una hora estándar o un horario de verano.
Terminología de zona horaria
En la tabla siguiente se definen los términos que se usan habitualmente al trabajar con zonas horarias y desarrollar aplicaciones compatibles con zonas horarias.
Término | Definición |
---|---|
Regla de ajuste | Regla que define cuándo se produce la transición del horario estándar al horario de verano y de vuelta del horario de verano al horario estándar. Cada regla de ajuste tiene una fecha de inicio y finalización que define cuándo está en vigor la regla (por ejemplo, la regla de ajuste está en vigor desde el 1 de enero de 1986 hasta el 31 de diciembre de 2006), una diferencia (la cantidad de tiempo por la que cambia la hora estándar como resultado de la aplicación de la regla de ajuste) e información sobre la fecha y hora específicas en que se producirán las transiciones durante el período de ajuste. Las transiciones pueden seguir una regla fija o una regla flotante. |
Hora ambigua | Un momento que se puede asignar a dos momentos diferentes en una misma zona horaria. Se produce cuando la hora del reloj se ajusta de nuevo en el tiempo, como durante la transición desde el horario de verano de una zona horaria a su hora estándar. Por ejemplo, si esta transición se produce en un día determinado a las 2:00 A.M. y hace que la hora cambie a 1:00 A.M., cada intervalo de tiempo entre las 1:00 A.M. y las 1:59:59 A.M. se puede interpretar como una hora estándar o un horario de verano. |
Regla fija | Regla de ajuste que establece una fecha determinada para la transición a o desde el horario de verano. Por ejemplo, una transición del horario de verano a la hora estándar que se produce cada año el 25 de octubre sigue una regla de ajuste fija. |
Regla flotante | Regla de ajuste que establece un día determinado de una semana determinada de un mes determinado para la transición a o desde el horario de verano. Por ejemplo, una transición del horario estándar al horario de verano que se produce el tercer domingo de marzo sigue una regla de ajuste flotante. |
Hora no válida | Hora inexistente que es un artefacto de la transición de la hora estándar al horario de verano. Se produce cuando la hora del reloj se ajusta hacia delante en el tiempo, como durante la transición de la hora estándar de una zona horaria a su horario de verano. Por ejemplo, si esta transición se produce en un día determinado a las 2:00 a.m. y hace que la hora cambie a 3:00 A.M., cada intervalo de tiempo entre las 2:00 A.M. y las 2:59:59 A.M. no es válido. |
Tiempo de transición | Información sobre un cambio de hora específico, como el cambio del horario de verano a la hora estándar o viceversa, en una zona horaria determinada. |
Zonas horarias y la clase TimeZoneInfo
En .NET, un TimeZoneInfo objeto representa una zona horaria. La TimeZoneInfo clase incluye un GetAdjustmentRules método que devuelve una matriz de TimeZoneInfo.AdjustmentRule objetos . Cada elemento de esta matriz proporciona información sobre la transición a y desde el horario de verano durante un período de tiempo determinado. (En el caso de las zonas horarias que no admiten el horario de verano, el método devuelve una matriz vacía). Cada TimeZoneInfo.AdjustmentRule objeto tiene una DaylightTransitionStart propiedad y DaylightTransitionEnd que define la fecha y hora particulares de la transición a y desde el horario de verano. La IsFixedDateRule propiedad indica si esa transición es fija o flotante.
.NET se basa en la información de zona horaria proporcionada por el sistema operativo Windows y almacenada en el Registro. Debido al número de zonas horarias de la tierra, no todas las zonas horarias existentes se representan en el registro. Además, dado que el registro es una estructura dinámica, se pueden agregar o quitar zonas horarias predefinidas. Por último, el registro no contiene necesariamente datos históricos de zona horaria. Por ejemplo, en Windows XP, el registro contiene datos sobre un único conjunto de ajustes de zona horaria. Windows Vista admite datos dinámicos de zona horaria, lo que significa que una sola zona horaria puede tener varias reglas de ajuste que se aplican a intervalos específicos de años. Sin embargo, la mayoría de las zonas horarias definidas en el registro de Windows Vista y admiten el horario de verano solo tienen una o dos reglas de ajuste predefinidas.
La dependencia de la TimeZoneInfo clase en el Registro significa que una aplicación con reconocimiento de zona horaria no puede estar segura de que se define una zona horaria determinada en el registro. Como resultado, el intento de crear una instancia de una zona horaria específica (que no sea la zona horaria local o la zona horaria que representa UTC) debe usar el control de excepciones. También debe proporcionar algún método para permitir que la aplicación continúe si no se puede crear una instancia de un objeto necesario TimeZoneInfo desde el registro.
Para controlar la ausencia de una zona horaria necesaria, la TimeZoneInfo clase incluye un CreateCustomTimeZone método , que puede usar para crear zonas horarias personalizadas que no se encuentran en el registro. Para obtener más información sobre cómo crear una zona horaria personalizada, consulte Cómo: Crear zonas horarias sin reglas de ajuste y Cómo: Crear zonas horarias con reglas de ajuste. Además, puede usar el ToSerializedString método para convertir una zona horaria recién creada en una cadena y guardarla en un almacén de datos (como una base de datos, un archivo de texto, el registro o un recurso de aplicación). A continuación, puede usar el FromSerializedString método para volver a convertir esta cadena en un TimeZoneInfo objeto . Para más información, consulte Cómo: Guardar zonas horarias en un recurso incrustado y Cómo: Restaurar zonas horarias desde un recurso incrustado.
Dado que cada zona horaria se caracteriza por un desplazamiento base de UTC, así como por un desplazamiento de UTC que refleja las reglas de ajuste existentes, una hora en una zona horaria se puede convertir fácilmente a la hora en otra zona horaria. Para ello, el TimeZoneInfo objeto incluye varios métodos de conversión, entre los que se incluyen:
ConvertTimeFromUtc, que convierte UTC a la hora en una zona horaria designada.
ConvertTimeToUtc, que convierte la hora en una zona horaria designada a UTC.
ConvertTime, que convierte la hora de una zona horaria designada a la hora de otra zona horaria designada.
ConvertTimeBySystemTimeZoneId, que usa identificadores de zona horaria (en lugar de TimeZoneInfo objetos) como parámetros para convertir la hora en una zona horaria designada a la hora en otra zona horaria designada.
Para obtener más información sobre la conversión de horas entre zonas horarias, consulte Conversión de horas entre zonas horarias.