Cómo controlar fechas y horas incluyen el DST

Seleccione idioma Seleccione idioma
Id. de artículo: 932955 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

INTRODUCCIÓN

Los desarrolladores que escriben aplicaciones que controlen las fechas y horas pueden utilizar tecnologías de uno o más que realizan la manipulación de fecha y hora manipulación. En concreto, determinado sistema operativo API, el tiempo de ejecución C (CRT) y Microsoft .NET Framework pueden convertir o manipular las fechas y horas. Este artículo describe los conceptos generales implicados en controlar fechas y horas. Además, en este artículo se describe el efecto de los cambios de horario de verano (DST) 2007 en determinados productos y tecnologías.

Más información

Tiempo de almacenamiento y la manipulación

Marcas de hora son valores que especifican una combinación de fecha y hora. Las aplicaciones que deben controlar marcas de hora normalmente almacenar esas marcas de hora en horario universal coordinado (UTC). La ventaja de UTC es UTC universal. UTC es no sujeta a las zonas horarias locales o del horario de verano. Sin embargo, UTC es relevante para la mayoría de los usuarios ni descriptivos. Aunque UTC es la opción obvia para el almacenamiento, no es una buena opción para mostrar. Por lo tanto, la mayoría de las aplicaciones convertir hora UTC a hora local antes de mostrar la marca de hora para el usuario. Por ejemplo, Explorador de Windows aplica la zona horaria y la configuración de DST para la marca de hora UTC antes de mostrar las fechas y horas para los archivos en un directorio de sistema de archivos de Windows NT (NTFS).

Conversión de hora UTC a hora local puede considerarse como aplicar dos desplazamientos. El primero es el desplazamiento de zona horaria y el segundo es el desplazamiento de DST. Por lo tanto, la hora local eficaz es hora UTC más un desplazamiento de zona horaria, además de desplazamiento de los DST aplicable. El desplazamiento de zona horaria es bastante sencillo. El equipo está configurado para una zona horaria determinada y esa zona horaria tiene un desplazamiento de UTC. Para determinar si debe aplicarse un desplazamiento de DST es mucho más compleja. Esta actividad se basa en muchas reglas son complejos y dinámicos.

Las reglas de DST complejas han cambiado recientemente con DST 2007. A partir de 2007, los Estados Unidos ha adoptado nuevas fechas de inicio nuevo fechas y fin para el horario de verano. Además, es habitual para otros países y gobiernos rutinariamente cambiar las fechas de comienzo y las fechas de finalización para el horario de verano en zonas horarias que están bajo su control. La siguiente sección describe los efectos del cambio de DST 2007 en productos de desarrollador.

Para obtener más información acerca de DST 2007, visite el siguiente sitio Web de Microsoft:
http://support.microsoft.com/gp/cp_dst

Efectos de DST 2007 en las tecnologías de desarrollador

Windows

En Windows Update y en Microsoft Update, actualizaciones están disponibles que habilitar Windows para aplicar correctamente los cambios de DST 2007 y de los años siguientes. Después de aplican estas actualizaciones, Windows calcula correctamente los desplazamientos de hora UTC actuales a la hora local a medida que el equipo pasa a través de DST. Los desplazamientos son los desplazamientos para las API de base y para las API relacionadas con el tiempo de redes.

Para obtener más información, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
942763Actualización acumulativa de diciembre de 2007 para los sistemas operativos Microsoft Windows

Tiempo de ejecución c (CRT)

El CRT también realiza conversiones de fecha y hora traducciones. Por lo tanto, el CRT también debe actualizarse para incluir las nuevas reglas de DST 2007. El CRT realiza su propio control de tiempo sólo cuando se establece la variable de entorno TZ o cuando falla una llamada de tiempo de API de sistema operativo subyacente. Las actualizaciones están disponibles para los CRTs que se incluyen con cada versión de Microsoft Visual Studio y también para los CRTs que se incluyen con Windows. Estas actualizaciones permiten el CRT continuar controlar correctamente las conversiones de DST en zonas horarias de Estados Unidos.

.NET Framework

.NET Framework se basa en las llamadas de sistema operativo subyacente. Por lo tanto, el comportamiento de .NET Framework refleja el estado del sistema operativo subyacente. No se requiere ninguna actualización independiente.

Entornos de desarrollo (IDE) integrado de Visual Studio .NET

El IDE de .NET Visual Studio incluyen las versiones 2002, 2003 y 2005 de Microsoft Visual C++, Microsoft Visual C# y Microsoft Visual Basic. Estos productos se ven afectados sólo porque incluyen el CRT. No se requiere actualización específicas de IDE.

Visual Studio 2005 Team Foundation Server

Visual Studio 2005 Team Foundation Server se basa en el sistema de operativo subyacente para conversiones de fecha y hora. Por lo tanto, Visual Studio 2005 Team Foundation Server presenta el mismo comportamiento que el sistema operativo. Visual Studio 2005 Team Foundation Server también se basa en Microsoft SQL Server, SQL Server Reporting Services y Windows SharePoint Services. Los equipos deben actualizarse con las actualizaciones relevantes para el sistema operativo, para SQL Server y para Windows SharePoint Services. Todas las actualizaciones pertinentes se deben aplicar en todos los equipos afectados al mismo tiempo. No actualización independiente de Visual Studio 2005 Team Foundation Server es necesaria.

Visual Studio 2005 Team System

Visual Studio 2005 Team System está afectada por el sistema operativo, a través de Visual Studio 2005 Team Foundation Server y a través de la biblioteca CRT. No actualización independiente de Visual Studio 2005 Team System es necesaria.

Visual SourceSafe

Para obtener más información acerca de problemas de Visual SourceSafe DST de 2007, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
931804Visuales SourceSafe horario de verano problemas en 2007

Tiempo de ejecución de Visual Basic 6.0

Tiempo de ejecución de Visual Basic 6.0 no está afectado.

Visual C++ 6.0

Visual C++ 6.0 ya no se admite.

Para obtener más información al respecto, visite el siguiente sitio Web de Microsoft:
http://support.microsoft.com/lifecycle/

Windows Software Development Kit (SDK) para Windows Vista

Este SDK incluye una versión de CRT se ve afectado por los cambios de DST 2007. Como parte de la instalación de este SDK, puede instalar Visual Studio 2005 CRT en equipos que aún no tengan esa versión de CRT instalada. Si ya está instalada una versión más reciente de CRT, la instalación del SDK no sobrescribe esa versión más reciente. Cuando se desinstala el SDK, la versión más reciente de CRT se queda en el equipo. Puede instalar la actualización de CRT de Visual Studio 2005 antes o después de instalar el SDK.

Windows SDK para Windows Vista también instala un conjunto de módulos de combinación (archivos .msm) para Visual Studio 2005 CRT para la redistribución de CRT como parte de las aplicaciones de C++ personalizadas. Una aplicación que implementa el CRT redistribuible en la carpeta de instalación de la aplicación debe implementar el CRT actualizada de la actualización de CRT de Visual Studio 2005 en lugar de los archivos .msm CRT Windows SDK para Windows Vista. Una aplicación que implementa la actualización redistribuible de Visual Studio 2005 CRT a la carpeta de instalación de Windows debe aplicar la actualización redistribuible de Visual Studio 2005 CRT a esos equipos.

Platform SDK para Microsoft Windows Server 2003 R2

Este SDK incluye una versión de CRT se ve afectado por los cambios de DST 2007. Los clientes deben seguir las notas para este SDK y utilice las actualizaciones de CRT de Visual Studio 2005 si son necesarios.

.NET Framework 2.0 SDK

Este SDK incluye una versión de CRT se ve afectado por los cambios de DST 2007. Como parte de la instalación de este SDK, puede instalar Visual Studio 2005 CRT en equipos que aún no tengan esa versión de CRT instalada. Si ya está instalada una versión más reciente de CRT, la instalación del SDK no sobrescribe esa versión más reciente. Cuando se desinstala el SDK, la versión más reciente de CRT se queda en el equipo. Puede instalar la actualización de CRT de Visual Studio 2005 antes o después de instalar el SDK.

Conversión de hora local en Windows

Las aplicaciones convertir normalmente horas UTC en horas locales antes de mostrar información de tiempo e información de fecha para el usuario. Windows proporciona varias API para las aplicaciones utilizar para la manipulación de marca de hora.
  • La función GetSystemTime() y la función GetSystemTimeAsFileTime() obtienen la hora UTC actual en una estructura SYSTEMTIME o en una estructura FILETIME.
  • La función GetLocalTime() Obtiene la hora local actual en una estructura SYSTEMTIME.
  • La función GetTimeZoneInformation() obtiene una estructura TIME_ZONE_INFORMATION que describe la zona horaria actual y la configuración de DST para el equipo.
  • La función SystemTimeToFileTime() y la función FileTimeToSystemTime() las referencias entre estructuras SYSTEMTIME y FILETIME estructuras.
  • La función FileTimeToLocalFileTime() y la función LocalFileTimeToFileTime() convertir y traducen una estructura FILETIME entre la UTC y la hora local mediante la zona horaria actual y la configuración de DST en el equipo.
  • La función SystemTimeToTzSpecificLocalTime() y la función TzSpecificTimeToSystemTime() convierten una marca de hora UTC en una estructura SYSTEMTIME en una estructura SYSTEMTIME local. Estas funciones utilizan una estructura TIME_ZONE_INFORMATION que especifica la fecha de comienzo y la fecha final para el horario de verano. De forma predeterminada, las reglas de DST actuales se utilizan cuando no se proporciona ninguna dicha estructura.
  • La función de NetRemoteTOD() Obtiene la hora desde un servidor remoto mediante el servidor ?s información y configuración.
Nota La función FileTimeToLocalFileTime() y la función LocalFileTimeToFileTime() realizan la conversión entre la hora UTC y la hora local utilizando sólo la información de zona horaria actual y la información de DST. Esta conversión se produce independientemente de la marca de tiempo que se va a convertir.

Para ver un ejemplo de este comportamiento en el Explorador de Windows, siga estos pasos en un equipo que reside en una zona horaria que utiliza horario de verano.

Tenga en cuenta que estos pasos requieren que cambie el reloj del sistema. Por lo tanto, debe salir de cualquier aplicación, como por ejemplo, las aplicaciones de calendario, que podrían reaccionar ante estos cambios de tiempo antes de que siga estos pasos.
  1. Cambiar la fecha en el equipo a un día de DST. Por ejemplo, establecer la fecha 1 de julio de 2006.
  2. En un directorio NTFS en el mismo equipo, cree un nuevo archivo de texto que se denomina Test.txt.
  3. Observe que la marca de hora en el archivo se muestra como se indica a continuación en el Explorador de Windows:
    1/7/2006 3: 37 p.m.
  4. Cambiar la fecha en el equipo a un día sin cambio horario. Por ejemplo, establecer la fecha a 1 de febrero de 2007.
  5. Actualizar la ventana Explorador de Windows.
  6. Observe que la marca de hora en el archivo se muestra como se indica a continuación en el Explorador de Windows:
    1/7/2006 2: 37 p.m.
En este ejemplo anterior, la marca de hora UTC en el archivo no cambia. Sin embargo, las reglas que se utilizan para convertir la marca de hora a la hora local cambian dependiendo de la fecha actual en el equipo. En el paso 3, un desplazamiento de DST se aplicó porque está 1 dentro del intervalo de DST. En el paso 6, no se aplicó ningún desplazamiento DST, porque 1 de febrero no se encuentra dentro del intervalo de DST. Este comportamiento se produce para que la marca de hora de archivo se puede convertir manera determinista hora local a hora local.

Para obtener más información, vea este blog:
http://blogs.msdn.com/oldnewthing/archive/2003/10/24/55413.aspx
El método SystemTimeToTzSpecificLocalTime() y el método TzSpecificTimeToSystemTime() conversión entre hora UTC y la hora local mediante la estructura TIME_ZONE_INFORMATION proporcionada. Si no se proporciona ninguna información de zona horaria, estas funciones utilizan las reglas de zona horaria actuales y las reglas de DST para determinar si un desplazamiento de DST deben ser aplicadas a la marca de hora. Esto es funcionalmente equivalente a llamar al método GetTimeZoneInformation() para obtener la estructura TIME_ZONE_INFORMATION que está actualmente en vigor.

La estructura TIME_ZONE_INFORMATION incluye la fecha de inicio y la fecha de parada para el horario de verano. Por lo tanto, cuando la estructura TIME_ZONE_INFORMATION utiliza la información de zona horaria actual, la estructura TIME_ZONE_INFORMATION puede introducir una imprecisión histórico. Este comportamiento puede producirse si la información de zona horaria actual y la información DST no reflejan la marca de tiempo que se va a convertir. Este comportamiento está afectado por las reglas de DST 2007 sólo porque han cambiado las reglas que rigen las fechas cuando DST inicia y detiene.

Para obtener conversiones históricamente exactas de estas funciones, una aplicación debe proporcionar una estructura TIME_ZONE_INFORMATION históricamente precisa cuando la aplicación llama a estas funciones.

Dinámicas zonas horarias de Windows

Windows Vista presenta dinámicas zonas horarias de DST. DST dinámico proporciona compatibilidad para las zonas horarias cuyos límites para el horario de verano cambie de un año a año. Estas reglas se almacenan en el registro. Las aplicaciones pueden consultar las reglas mediante la función GetDynamicTimeZoneInformation() .

Zonas horarias dinámicas habilitar la actualización más fácil de equipos, especialmente para las configuraciones regionales donde los límites de horario de verano anuales se conocen de antemano. Para obtener más información acerca de la estructura DYNAMIC_TIME_ZONE_INFORMATION en el SDK de Windows Vista, visite el siguiente sitio Web de Microsoft Developer Network (MSDN):
http://msdn2.microsoft.com/en-us/library/ms724253.aspx

Conversión de hora local en el tiempo de ejecución C (CRT)

El CRT básicamente tiene tres modos en que pueden traducir las marcas de hora:
  • Si no se establece la variable de entorno TZ, el CRT llama a las API de Windows y presenta el comportamiento de Windows como se describe en este artículo.
  • Si se establece la variable de entorno TZ, el CRT realiza sus propias conversiones que se basan en esa configuración. Se está actualizando el CRT para que respeta las nuevas reglas de DST 2007 cuando realiza conversiones en este escenario.
  • Si la variable de entorno TZ no se ha establecido, pero un error de las API de Windows subyacentes, CRT retrocede sus propias conversiones mediante un valor de PST8PDT para la variable de entorno TZ.
El CRT contiene su propia lógica para convertir UTC en hora local. Las aplicaciones pueden obtener las marcas de hora UTC de funciones como la función time() . Estas marcas de hora UTC se almacenan en los valores de time_t . Puede realizar la conversión a la hora local con una función como la función localtime_s() . La función localtime_s() rellena una estructura de tm que se define en el archivo de encabezado Time.h. La estructura de tm se basa en la zona horaria que está definida en la variable de entorno TZ y en las reglas de DST están en vigor en el momento de la marca de hora.

Nota Esta conversión sigue reglas específicas para los Estados Unidos.

Antes de aplicar la actualización de DST 2007, la biblioteca CRT controla correctamente marcas de hora actual en zonas horarias de Estados Unidos. Después de aplicar la actualización de DST 2007, la biblioteca CRT también controla fechas futuras de Estados Unidos y anteriores. Las actualizaciones de CRT se enumeran en la sección ? referencias ?.

Conversión de hora local en .NET Framework

.NET Framework contiene clases que almacenan y convertir las marcas de tiempo. Estas clases incluyen la clase DateTime , la clase TimeZone , la clase TimeSpan y la clase DateTimeKind . Como se indicó anteriormente, estas clases dependen principalmente la implementación de plataforma subyacente. Estas clases presentan el mismo comportamiento que el sistema operativo subyacente API.

Una comportamiento interesante demostrado por las clases de la fecha de .NET Framework y clases en tiempo de está relacionado con las funciones que la marca de hora el desplazamiento por una cantidad solicitada. Por ejemplo, considere la función de AddHours() , la función AddMinutes() y la función AddSeconds() en la clase DateTime . Estas funciones y con nombre similar, simplemente incrementar la marca de hora de la cantidad solicitada independientemente de la configuración de DST. Este comportamiento podría ser conveniente aritmética simple en la marca de hora UTC subyacente. Sin embargo, este comportamiento podría producir resultados inesperados cuando la adición produce la marca de hora pasar dentro o fuera de horario de verano. Este comportamiento es relacionado con los cambios de DST 2007.

Recomendaciones

Las siguientes recomendaciones pueden ayudan a los desarrolladores minimizar el efecto de DST 2007 y mejorar fecha general y control de tiempo.
  • Debe planear una instalación cerca atómica de las actualizaciones de DST 2007. Todas las actualizaciones planeadas de DST 2007 se deben aplicar como close en tiempo a uno al otro como sea posible. Si un equipo que se ha actualizado intenta utilizar métodos como las consultas SQL o servicios Web para comunicarse con un equipo que no se ha actualizado, pueden producirse errores de traducción. De forma similar, si un único equipo requiere actualizaciones de dos o más, como la actualización de Windows y la actualización de CRT, se deben aplicar las actualizaciones al mismo tiempo.
  • Marcas de hora UTC son históricamente precisos. Normalmente es la conversión a la hora local relacionado con la mayoría de las aplicaciones. Las aplicaciones siempre deben almacenar las marcas de hora UTC. Las conversiones a la hora local para fines de presentación requieren información de zona horaria e información de DST. Esta información puede proceder de varios orígenes:
    • La aplicación puede utilizar la zona horaria actual y la configuración de DST para la conversión. Esto puede introducir una imprecisión en la conversión si la actual zona horaria y la configuración de DST no estuviesen en vigor el momento de la marca de hora.
    • La aplicación puede almacenar la información de zona horaria precisa anteriormente y la información de DST, además de la marca de hora UTC.
    • Cuando las zonas horarias dinámicas están disponibles, la aplicación puede utilizar zonas horarias dinámicas para determinar la información de zona horaria que debe aplicarse a una determinada marca de hora UTC. Esta opción sólo está disponible cuando la información de zona horaria dinámica está disponible para una marca de tiempo específico y para una zona horaria concreta.
    • La aplicación puede almacenar una marca de hora local y la marca de hora UTC. Este método impide que la necesidad de conversión futura.
  • Cualquier comunicación entre equipos que tratar con marcas de hora debe utilizar marcas de hora UTC. Implícitamente así ambos la misma información de contexto para UTC.
  • Si una aplicación controla las fechas, debe tener cuidado con la forma que se tratan las fechas en las pruebas. Las fechas que se muestran sin información de hora se almacenan normalmente como una marca de hora de 12: 00 A.M. en la fecha pertinente. Por lo tanto, un error de cierre por uno en la parte de horas de la marca de hora podría producir un resultado fuera por uno en la fecha efectiva si se desplaza a la hora a 11: 00 P.M. del día anterior.

Referencias

Para obtener más información sobre el portal de Microsoft de DST 2007, visite el siguiente sitio Web de Microsoft: http://support.microsoft.com/gp/cp_dstPara obtener más información, haga clic en los números de artículo siguientes para verlos en Microsoft Knowledge Base:
942763Actualización acumulativa de diciembre de 2007 para los sistemas operativos Microsoft Windows
931975Cómo preparar SQL Server 2005 y SQL Server 2000 para cambios de horario de verano en 2007
931804Visuales SourceSafe horario de verano problemas en 2007
Para obtener más información, visite los siguientes sitios Web de Microsoft Developer Network (MSDN):
http://msdn2.microsoft.com/en-us/library/ms724277.aspx

http://msdn2.microsoft.com/en-us/library/ms724490.aspx

http://msdn2.microsoft.com/en-us/library/ms725473.aspx
Para obtener actualizaciones de DST 2007 para el tiempo de ejecución C (CRT), haga clic en los números de artículo siguientes para verlos en Microsoft Knowledge Base:
932305REVISIÓN: Visual C++ .NET 2002 C runtime daylight saving time 2007 update for TZ environment variable problem
932304REVISIÓN: Visual C++ .NET 2002 Service Pack 1 C runtime daylight saving time 2007 update for TZ environment variable problem
932299REVISIÓN: Visual C++ .NET 2003 C runtime daylight saving time 2007 update for TZ environment variable problem
932298REVISIÓN: Visual C++ .NET 2003 Service Pack 1 C runtime daylight saving time 2007 update for TZ environment variable problem
932392REVISIÓN: Visual C++ .NET 2005 C runtime daylight saving time 2007 update para la variable de entorno TZ
932391REVISIÓN: Visual C++ .NET 2005 Service Pack 1 C runtime daylight saving time 2007 update para la variable de entorno TZ
932590REVISIÓN: Basado en Windows aplicaciones que utilizan la variable de entorno TZ no funcionen como se esperaba debido a cambios del horario de verano de

Propiedades

Id. de artículo: 932955 - Última revisión: martes, 15 de enero de 2008 - Versión: 5.2
La información de este artículo se refiere a:
  • The C Run-Time (CRT)
  • Microsoft Visual Studio 2005 Service Pack 1
  • Microsoft Visual Studio 2005 Team Foundation Server
  • Microsoft Visual Studio 2005 Team System Team Foundation:
  • Microsoft Visual Studio 2005 Standard Edition
  • Microsoft Visual Studio 2005 Professional Edition
  • Microsoft Visual Studio 2005 Express Edition
  • Microsoft Visual Studio .NET 2003 Service Pack 1
  • Microsoft Visual Studio .NET 2003 Professional
  • Microsoft Visual Studio .NET 2003 Enterprise Architect
  • Microsoft Visual Studio .NET 2003 Enterprise Developer
  • Microsoft Visual Studio .NET 2003 Academic Edition
  • Microsoft Visual Studio .NET 2002 Professional
  • Microsoft Visual Studio .NET (2002), Enterprise Architect Edition SP1
  • Microsoft Visual Studio .NET 2002 Enterprise Developer
  • Microsoft Visual Studio .NET 2002 Enterprise Architect
  • Microsoft Visual Studio .NET 2002 Academic Edition
Palabras clave: 
kbmt kbinfo kbhowto KB932955 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 932955

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com