Comment faire pour gérer les dates et heures qui incluent l’heure d’été

INTRODUCTION

Les développeurs qui écrivent des applications capables de traiter des dates et des heures peuvent utiliser une ou plusieurs technologies assurant la manipulation du temps et manipulation de date. En particulier, le Microsoft.NET Framework, le runtime C (CRT) et certain API du système d’exploitation base peuvent convertir ou manipuler les dates et les heures. Cet article décrit certains concepts généraux impliqués dans la gestion des dates et des heures. En outre, cet article décrit l’effet des modifications de 2007 de l’heure d’été à l’heure d’été (DST) sur certains produits et les technologies.

Plus d'informations

Manipulation et stockage

Les horodatages sont des valeurs qui spécifient une combinaison de date et d’heure. Les applications qui doivent gérer des horodatages généralement stockent les horodatages en heure universelle coordonnée (UTC). L'avantage de l'UTC est qu'il est universel. L’UTC est non soumises à des fuseaux horaires locaux ou à l’heure d’été. Toutefois, l'UTC n'est ni convivial ni pertinent pour la plupart des utilisateurs. Bien que l’heure UTC est le choix évident pour le stockage, il n’est pas un bon choix pour l’affichage. Par conséquent, la plupart des applications convertir l’heure d’UTC en heure locale avant d’afficher l’horodatage pour l’utilisateur. Par exemple, l’Explorateur Windows applique le fuseau horaire et le paramètre de l’heure d’été à l’heure UTC timestamp avant qu’il affiche des dates et des heures pour les fichiers dans un répertoire du système de fichiers Windows NT (NTFS).

Conversion à partir de l’heure UTC en heure locale peut être considérée que l’application de deux offsets. Le premier est l’offset de fuseau horaire, et le second correspond au décalage de l’heure d’été. Par conséquent, heure locale est effectivement heure UTC plus un décalage de fuseau horaire, ainsi que toute l’heure d’été applicable de contrepartie. Le décalage de fuseau horaire est relativement simple. L’ordinateur est configuré pour un fuseau horaire particulier et que ce fuseau horaire a un offset d’UTC. Pour déterminer si un offset d’heure d’été doit être appliqué est beaucoup plus complexe. Cette activité s’appuie sur des règles qui sont complexes et dynamiques.

Ces règles complexes ont récemment changé avec l’heure d’été 2007. À partir de 2007, les États-Unis a adopté des nouvelles dates de début et dates de fin de nouveau l’heure d’été. En outre, il est courant pour les autres pays et les gouvernements à modifier régulièrement les dates de début et de fin de l’heure d’été dans les fuseaux horaires qui sont sous leur contrôle. La section suivante décrit les effets de la modification de l’heure d’été 2007 sur liés au développement de produits.

Pour plus d’informations sur l’heure d’été 2007, visitez le site Web de Microsoft à l’adresse suivante :

Effets de l’heure d’été 2007 sur liés au développement de technologies

Windows

Sur Windows Update et Microsoft Update, mises à jour sont disponibles qui permettent à Windows appliquer correctement les modifications de l’heure d’été 2007 et les années suivantes. Après l’appliquent de ces mises à jour, Windows calcule correctement les offsets en cours à partir de l’heure UTC en heure locale lorsque l’ordinateur passe à l’heure d’été. Les décalages sont les offsets pour les API de base et pour les API liées au temps de mise en réseau.

Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :

942763 décembre 2007 cumulative de fuseau horaire mise à jour pour Microsoft Windows de systèmes d’exploitation

C runtime (CRT)

Le CRT effectue également des traductions de la date et les heures. Par conséquent, le CRT doit également être mis à jour pour inclure les nouvelles règles d’heure d’été 2007. Le CRT effectue son propre traitement de temps uniquement lorsque la valeur de la variable d’environnement TZ ou en cas d’échec d’un appel de temps API du système d’exploitation sous-jacent. Mises à jour sont disponibles pour les moniteurs CRT qui est incluses avec chaque version de Visual Studio de Microsoft et pour les écrans CRT qui est inclus avec Windows. Ces mises à jour permettent le CRT continuer à gérer correctement les conversions d’heure d’été dans les fuseaux horaires des États-Unis d’Amérique.

Le.NET Framework

Le.NET Framework s’appuie sur les appels de système d’exploitation sous-jacent. Par conséquent, le comportement de la.NET Framework reflète l’état du système d’exploitation sous-jacent. Aucune mise à jour distincte n’est nécessaire.

Visual Studio .NET intégré des environnements de développement (IDE)

L’IDE .NET Visual Studio incluent les versions 2002, 2003 et 2005 de Microsoft Visual C++, Microsoft Visual C# et Microsoft Visual Basic. Ces produits sont affectés uniquement parce qu’ils incluent le CRT. Aucune mise à jour spécifique à l’IDE n’est requis.

Visual Studio 2005 Team Foundation Server

Visual Studio 2005 Team Foundation Server s’appuie sur le système d’exploitation sous-jacent pour les conversions de date et d’heure. Par conséquent, Visual Studio 2005 Team Foundation Server adopte le même comportement que le système d’exploitation. Visual Studio 2005 Team Foundation Server s’appuie également sur Microsoft SQL Server, SQL Server Reporting Services et Windows SharePoint Services. Les ordinateurs doivent être mis à jour avec les mises à jour pertinentes pour le système d’exploitation, SQL Server et de Windows SharePoint Services. Les mises à jour pertinentes doivent être appliquées sur tous les ordinateurs affectés en même temps. Aucune mise à jour séparée de Visual Studio 2005 Team Foundation Server n’est requis.

Visual Studio 2005 Team System

Visual Studio 2005 Team System est affecté par le système d’exploitation, par l’intermédiaire de Visual Studio 2005 Team Foundation Server et par le CRT. Aucune mise à jour Visual Studio 2005 Team System distinct n’est nécessaire.

Visual SourceSafe

Pour plus d’informations sur les problèmes de Visual SourceSafe l’heure d’été en 2007, cliquez sur le numéro ci-dessous pour afficher l’article correspondant dans la Base de connaissances Microsoft :

931804 visual SourceSafe les problèmes de l’heure d’été en 2007

Exécution de Visual Basic 6.0

Le runtime de Visual Basic 6.0 n’est pas affecté.

Visual C++ 6.0

Visual C++ 6.0 n’est plus pris en charge.

Pour plus d’informations, visitez le site Web de Microsoft à l’adresse suivante :

Windows Kit de développement logiciel (SDK) pour Windows Vista



Ce kit comprend une version du CRT qui est affecté par les modifications de l’heure d’été 2007. Dans le cadre de l’installation de ce kit, vous pouvez installer Visual Studio 2005 CRT sur des ordinateurs qui n’ont pas déjà cette version du CRT installée. Si une version plus récente du CRT est déjà installée, l’installation du SDK ne remplace pas cette version plus récente. Lorsque le Kit de développement est désinstallée, la dernière version du CRT est laissée sur l’ordinateur. Vous pouvez installer la mise à jour CRT de 2005 de Visual Studio avant ou après avoir installé le Kit de développement.

Le Kit de développement logiciel Windows pour Windows Vista installe également un ensemble de modules de fusion (fichiers .msm) pour la CRT Visual Studio 2005 pour la redistribution du CRT dans le cadre des applications C++. Une application qui déploie le CRT redistribuable dans le dossier d’installation de l’application doit déployer le CRT mis à jour à partir de la mise à jour CRT de 2005 de Visual Studio place des fichiers .msm CRT à partir du Kit de développement logiciel Windows pour Windows Vista. Une application qui déploie la mise à jour Visual Studio CRT de 2005 redistribuable dans le dossier d’installation de Windows doit appliquer la mise à jour redistribuable Visual Studio CRT de 2005 à ces ordinateurs.

Plate-forme SDK pour Microsoft Windows Server 2003 R2

Ce kit comprend une version du CRT qui est affecté par les modifications de l’heure d’été 2007. Les clients doivent suivez les notes de publication pour ce SDK et utiliser les mises à jour CRT de 2005 de Visual Studio s’ils sont nécessaires.

Le.NET Framework 2.0 SDK

Ce kit comprend une version du CRT qui est affecté par les modifications de l’heure d’été 2007. Dans le cadre de l’installation de ce kit, vous pouvez installer Visual Studio 2005 CRT sur des ordinateurs qui n’ont pas déjà cette version du CRT installée. Si une version plus récente du CRT est déjà installée, l’installation du SDK ne remplace pas cette version plus récente. Lorsque le Kit de développement est désinstallée, la dernière version du CRT est laissée sur l’ordinateur. Vous pouvez installer la mise à jour CRT de 2005 de Visual Studio avant ou après avoir installé le Kit de développement.

Conversion de l’heure locale dans Windows

Applications généralement convertir les heures UTC en heures locales avant d’afficher les informations de temps et les informations de date à l’utilisateur. Windows fournit plusieurs API pour les applications à utiliser pour la manipulation de l’horodatage.
  • La fonction GetSystemTime() et la fonction GetSystemTimeAsFileTime() obtenir l’heure UTC actuelle dans une structure SYSTEMTIME ou dans une structure FILETIME.
  • La fonction GetLocalTime() Obtient l’heure locale actuelle dans une structure SYSTEMTIME.
  • La fonction GetTimeZoneInformation() reçoit Obtient une structure TIME_ZONE_INFORMATION qui décrit le fuseau horaire actuel et le paramètre de l’heure d’été de l’ordinateur.
  • La fonction SystemTimeToFileTime() et le FileTimeToSystemTime() de marshaler entre les structures de SYSTEMTIME et FILETIME.
  • La fonction FileTimeToLocalFileTime() et la fonction LocalFileTimeToFileTime() convertir et traduisent une structure FILETIME entre l’heure UTC et l’heure locale à l’aide du fuseau horaire actuel et le paramètre de l’heure d’été sur l’ordinateur.
  • La fonction SystemTimeToTzSpecificLocalTime() et la fonction TzSpecificTimeToSystemTime() convertissent un timestamp UTC dans une structure SYSTEMTIME en une structure SYSTEMTIME locale. Ces fonctions utilisent une structure TIME_ZONE_INFORMATION qui spécifie la date de début et de fin de l’heure d’été. Par défaut, les règles de l’heure d’été en cours sont utilisées lorsqu’aucune structure n’est fournie.
  • La fonction NetRemoteTOD() obtienne l’heure à partir d’un serveur distant à l’aide des informations et des paramètres du serveur.
Remarque La fonction FileTimeToLocalFileTime() et la fonction LocalFileTimeToFileTime() effectuent la conversion entre l’heure UTC et l’heure locale en utilisant uniquement les informations de fuseau horaire en cours et les informations d’heure d’été. Cette conversion a lieu quel que soit l’horodatage qui est en cours de conversion.

Pour voir un exemple de ce comportement dans l’Explorateur Windows, procédez comme suit sur un ordinateur qui se trouve dans un fuseau horaire qui utilise l’heure d’été.

N’oubliez pas que ces étapes nécessitent que vous modifiez l’horloge système. Par conséquent, vous devez quitter toutes les applications, telles que les applications de calendrier, ce qui peuvent réagir à ces modifications de temps avant de suivre ces étapes.
  1. Modification de la date d’un jour l’heure d’été de l’ordinateur. Par exemple, définir la date au 1er juillet 2006.
  2. Dans un répertoire NTFS sur le même ordinateur, créez un nouveau fichier texte nommé Test.txt.
  3. Notez que l’horodatage du fichier s’affiche comme suit dans l’Explorateur Windows :
    7/1/2006 3:37pm
  4. Modification de la date d’un jour sans que l’heure d’été de l’ordinateur. Par exemple, définir la date au 1er février 2007.
  5. Actualiser la fenêtre de l’Explorateur Windows.
  6. Notez que l’horodatage du fichier s’affiche comme suit dans l’Explorateur Windows :
    7/1/2006 2:37pm
Dans l’exemple précédent, l’horodatage UTC du fichier ne change pas. Toutefois, les règles qui sont utilisées pour convertir l’horodatage en heure locale modifier en fonction de la date actuelle sur l’ordinateur. À l’étape 3, un décalage de l’heure d’été a été appliqué car le 1 juillet relève de la plage de l’heure d’été. À l’étape 6, aucun décalage de l’heure d’été a été appliqué, car le 1 février n’entre pas dans la plage de l’heure d’été. Ce comportement se produit afin que l’horodatage du fichier peut être converti de façon déterministe à l’heure locale et de l’heure locale.

Pour plus d’informations, consultez le blog :La méthode SystemTimeToTzSpecificLocalTime() et la méthode TzSpecificTimeToSystemTime() de conversion entre l’heure UTC et l’heure locale à l’aide de la structure TIME_ZONE_INFORMATION fournie. Si aucune information de fuseau horaire est fournie, ces fonctions utilisent les règles de fuseau horaire en cours, et les règles de l’heure d’été pour déterminer si un offset de l’heure d’été doivent être appliqués à l’horodatage. Cela est fonctionnellement équivalente à l’appel de la méthode GetTimeZoneInformation() reçoit pour obtenir la structure TIME_ZONE_INFORMATION qui est en vigueur.

La structure TIME_ZONE_INFORMATION inclut la date de début et la date de fin de l’heure d’été. Par conséquent, lorsque la structure TIME_ZONE_INFORMATION utilise les informations de fuseau horaire en cours, la structure TIME_ZONE_INFORMATION peut introduire une inexactitude historique. Ce problème peut se produire si les informations de fuseau horaire en cours et les informations d’heure d’été ne reflètent pas l’horodatage qui est en cours de conversion. Ce comportement est affecté par l’heure d’été 2007 uniquement parce que les règles qui régissent les dates lorsque l’heure d’été démarre et arrête ont été modifiées.

Pour obtenir des conversions historiquement exactes à partir de ces fonctions, une application doit fournir une structure TIME_ZONE_INFORMATION historiquement exacte lorsque l’application appelle ces fonctions.

Dynamique des fuseaux horaires dans Windows

Windows Vista introduit l’heure d’été dynamique des fuseaux horaires. L’heure d’été dynamique prend en charge les fuseaux horaires dont les limites de l’heure d’été changent d’année en année. Ces règles sont stockées dans le Registre. Les applications peuvent interroger les règles à l’aide de la fonction GetDynamicTimeZoneInformation() .

Fuseaux horaires dynamiques permettent une mise à jour plus facile des ordinateurs, en particulier pour des paramètres régionaux où les limites de l’heure d’été annuels sont connues à l’avance. Pour plus d’informations sur la structure DYNAMIC_TIME_ZONE_INFORMATION dans le Kit de développement de Windows Vista, visitez le site Web de Microsoft Developer Network (MSDN) à l’adresse suivante :

Conversion de l’heure locale dans la bibliothèque C runtime (CRT)

Le CRT comporte essentiellement trois modes dans lesquels il peut convertir des horodatages :
  • Si la variable d’environnement TZ n’est pas définie, le CRT appelle les API Windows et montre le comportement de Windows comme décrit dans cet article.
  • Si la valeur de la variable d’environnement TZ, le CRT effectue ses propres conversions qui sont basées sur ce paramètre. Le CRT est mis à jour afin qu’il respecte les nouvelles règles d’heure d’été 2007 lorsqu’il exécute des conversions dans ce scénario.
  • Si la variable d’environnement TZ n’est pas définie, mais l’échec de l’API Windows sous-jacent, le CRT revient à ses propres conversions à l’aide d’une valeur de PST8PDT pour la variable d’environnement TZ.
Le CRT contient sa propre logique pour la conversion UTC en heure locale. Les applications peuvent obtenir des estampilles UTC de fonctions telles que la fonction time() . Ces estampilles UTC sont stockés dans les valeurs time_t . Conversion en heure locale peut être effectuée à l’aide d’une fonction telle que la fonction localtime_s() . La fonction localtime_s() remplit une structure tm qui est définie dans le fichier d’en-tête Time.h. La structure de la tm est basée sur le fuseau horaire qui est défini dans la variable d’environnement TZ et sur les règles de l’heure d’été qui sont en vigueur au moment de l’horodatage.

Remarque Cette conversion suit des règles spécifiques aux États-Unis.

Avant d’appliquer la mise à jour de l’heure d’été 2007, le CRT gère correctement les horodatages actuels dans des fuseaux horaires des États-Unis d’Amérique. Après avoir appliqué la mise à jour de l’heure d’été 2007, le CRT gère également les passé et les dates futures des États-Unis d’Amérique. Mises à jour pour la bibliothèque CRT sont répertoriées dans la section « Références ».

Conversion de l’heure locale dans le.NET Framework

Le.NET Framework contient des classes qui stockent et convertir des horodatages. Ces classes incluent la classe DateTime , la classe TimeZone , la classe TimeSpan et la classe DateTimeKind . Comme indiqué précédemment, ces classes dépendent principalement de l’implémentation sous-jacente de la plate-forme. Ces classes présentent le même comportement que l’API du système d’exploitation sous-jacent.

Un comportement intéressant exposé par les classes de date de.NET Framework et les classes de temps se rapporte aux fonctions qui l’offset de l’horodatage par un montant demandé. Par exemple, considérez la fonction AddHours() , la fonction AddMinutes() et la fonction AddSeconds() dans la classe DateTime . Ces fonctions et portant le même nom, incrémente simplement l’horodatage par la quantité demandée, sans tenir compte des paramètres de l’heure d’été. Ce comportement peut être considérée comme arithmétique simple sur l’horodatage UTC sous-jacent. Toutefois, ce comportement entraînerait des résultats inattendus lors de l’ajout entraîne l’horodatage passer dans ou en dehors de l’heure d’été. Ce comportement n’est pas lié aux modifications de l’heure d’été 2007.

Recommandations

Les recommandations suivantes peuvent aider les développeurs à réduire l’effet de l’heure d’été 2007 et améliorer la gestion du temps et général.
  • Vous devez prévoir une installation près atomique les mises à jour de l’heure d’été 2007. Toutes les mises à jour de l’heure d’été 2007 planifiées doivent être appliquées comme close dans le temps à une de l’autre que possible. Si un ordinateur a été mis à jour tente d’utiliser des méthodes telles que les requêtes SQL ou de services Web pour communiquer avec un ordinateur qui n’a pas été mis à jour, des erreurs de conversion peuvent se produire. De même, si un seul ordinateur nécessite des mises à jour deux ou plusieurs, telles que la mise à jour de Windows et de la mise à jour CRT, les mises à jour doivent être appliquées en même temps.
  • Les estampilles UTC sont historiquement exacts. Il s’agit généralement de la conversion en heure locale concerne la plupart des applications. Les applications doivent toujours stocker les estampilles UTC. Conversions en heure locale pour l’affichage nécessitent des informations de fuseau horaire et l’heure d’été. Ces informations peuvent provenir de plusieurs sources :
    • L’application peut utiliser le fuseau horaire actuel et le paramètre de l’heure d’été pour la conversion. Cela peut introduire une imprécision dans la conversion si le fuseau horaire actuel et le paramètre de l’heure d’été n’étaient pas en vigueur au moment de l’horodatage.
    • L’application peut stocker les informations de fuseau horaire exactes précédemment et l’heure d’été en plus de l’UTC timestamp.
    • Lorsque les fuseaux horaires dynamiques sont disponibles, l’application peut utiliser des fuseaux horaires dynamiques pour déterminer les informations de fuseau horaire doivent être appliquées à un horodatage UTC particulière. Cette option est disponible uniquement lorsque les informations de fuseau horaire dynamiques sont disponibles pour un cachet de date spécifique et pour un fuseau horaire spécifique.
    • L’application peut stocker un horodatage local et l’UTC timestamp. Cette méthode élimine la nécessité d’une conversion future.
  • Toutes les communications entre les ordinateurs qui gèrent les estampilles doivent utiliser les estampilles UTC. Cela donne implicitement les deux ordinateurs les mêmes informations de contexte pour l’heure UTC.
  • Si une application gère les dates, vous devez être prudent avec la façon que les dates sont traitées dans le test. Les dates sont affichées sans informations de temps sont généralement stockés sous forme d’estampille de 12:00 AM à la date considérée. Par conséquent, une erreur off-en-un dans la partie heure de l’horodatage peut provoquer dans un résultat de hors-en-un de la date d’effet si l’heure est décalée à 11 h 00 le jour précédent.

Références

Pour plus d’informations sur le portail de l’heure d’été 2007 Microsoft, visitez le site Web de Microsoft à l’adresse suivante :http://support.microsoft.com/gp/cp_dstPour plus d’informations, cliquez sur les numéros ci-dessous pour afficher les articles correspondants dans la Base de connaissances Microsoft :

942763 décembre 2007 cumulative de fuseau horaire mise à jour pour Microsoft Windows de systèmes d’exploitation

931975 comment préparer SQL Server 2005 et SQL Server 2000 pour les modifications apportées à l’heure d’été en 2007

931804 visual SourceSafe les problèmes de l’heure d’été en 2007

Pour plus d'informations, visitez les sites Web de Microsoft Developer Network (MSDN) suivant :Pour obtenir les mises à jour de l’heure d’été 2007 pour la bibliothèque C runtime (CRT), cliquez sur les numéros ci-dessous pour afficher les articles correspondants dans la Base de connaissances Microsoft :
932305 correctif : mise à jour de l’heure d’été à l’heure d’été 2007 de runtime C de Visual C++ .NET 2002 pour le problème de variable d’environnement TZ

932304 correctif : Visual C++ .NET 2002 Service Pack 1 C runtime l’heure d’été à l’heure d’été 2007 mise à jour pour le problème de variable d’environnement TZ

932299 correctif : mise à jour de l’heure d’été à l’heure d’été 2007 de runtime C de Visual C++ .NET 2003 pour le problème de variable d’environnement TZ

932298 correctif : Visual C++ .NET 2003 Service Pack 1 C runtime l’heure d’été à l’heure d’été 2007 mise à jour pour le problème de variable d’environnement TZ

932392 correctif : mise à jour de l’heure d’été à l’heure d’été 2007 de runtime C de Visual C++ .NET 2005 pour la variable d’environnement TZ

932391 correctif : mise à jour de Visual C++ .NET 2005 Service Pack 1 C runtime l’heure d’été à l’heure d’été 2007 pour la variable d’environnement TZ

932590 correctif : les applications Windows qui utilisent la variable d’environnement TZ peut ne pas fonctionnent comme prévu en raison des modifications apportées à l’heure d’été

Propriétés

ID d'article : 932955 - Dernière mise à jour : 17 janv. 2017 - Révision : 1

Commentaires