MetaTips

Le blog de l'edition logiciel en ligne

Articles

TimeZone sous Windows Vista, Seven et Windows 2008

Posted by Allouche Mathieu on November 9, 2009 at 7:45 AM

Si vous utilisez d'anciennes API exploitant la base de registre de Windows pour convertir vos dates d'un fuseau à l'autre, vous aurez remarqué qu'elles ne fonctionnent plus sur les derniers systèmes d'exploitation de Microsoft. Tout simplement car la structure de la base de registre a changé. Trouvez ici le moyen de les refaire fonctionner.

 

 

Type : Correctif

Niveau : 2/5

Durée de lecture : < 1 heure

Compatibilité / s'applique à :

    • Windows Vista  (NT 6.0)
    • Windows Seven (NT 6.1)
    • Windows 2008 (NT 6.0)
    • Windows 2008 (NT 6.1)

Les applications qui utilisent les informations de la base de registre, pour effectuer des conversions de dates, utilisent les informations stockées par zone. Chaque zone est décrite et contient les informations de fuseau, ainsi que notamment les parametres de passage à l'heure d'été. Suivant la version de votre OS, les clés utilisées se trouvent dans :

 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Time Zones

ou dans :

 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones
Prenons par exemple, l'export de la zone "Afghanistan Standard Time" sous un Windows XP : 

 

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Afghanistan Standard Time]
"Display"="(GMT+04:30) Kabul"
"Dlt"="Afghanistan Daylight Time"
"Std"="Afghanistan Standard Time"
"MapID"="-1,73"
"Index"=dword:000000af
"TZI"=hex:f2,fe,ff,ff,00,00,00,00,c4,ff,ff,ff,00,00,00,00,00,00,00,00,00,00,00,\
  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00

 

Depuis les nouvelles versions de Windows (NT 6.x), la structure de la base de registre a évoluée, et certaines clés ont disparues. Le problème est que beaucoup d'applications utilisent une clé unique "Index" pour identifier la zone. Voic un export de la base de registre d'un Seven pour la même zone :

 

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Afghanistan Standard Time]
"MUI_Display"="@tzres.dll,-460"
"MUI_Dlt"="@tzres.dll,-461"
"MUI_Std"="@tzres.dll,-462"
"Display"="(UTC+04:30) Kaboul"
"Dlt"="Afghanistan (heure d’été;)"
"Std"="Afghanistan"
"TZI"=hex:f2,fe,ff,ff,00,00,00,00,c4,ff,ff,ff,00,00,00,00,00,00,00,00,00,00,00,\
  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00

 

Les 2 clés qui ont disparues sont : MapID et Index. La corrections est simple, il suffit de mettre à jour la base de registre avec ces anciennes valeurs. Télécharger le fichier “TZUpgrade.reg” et effectuez l'import. Vous devez avoir les droits d’administration.
 
Apres import, vous aurez les valeurs suivantes, toujours pour la même zone :
 

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Afghanistan Standard Time]
"MUI_Display"="@tzres.dll,-460"
"MUI_Dlt"="@tzres.dll,-461"
"MUI_Std"="@tzres.dll,-462"
"Display"="(UTC+04:30) Kaboul"
"Dlt"="Afghanistan (heure d’été;)"
"Std"="Afghanistan"

"MapID"="-1,73"
"Index"=dword:000000af
"TZI"=hex:f2,fe,ff,ff,00,00,00,00,c4,ff,ff,ff,00,00,00,00,00,00,00,00,00,00,00,\
  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00

 

 

Mots clés : How to change time zone information by using Visual Basic, How to get enumeration of system time zones, GetUtcOffset, ToLocalTime, ToUniversalTime, GetLocalDateFromUtcDate, GetTimeZone, GetUtcDateFromLocalDate

 

Categories: Systemes d'exploitations, Developpements

Post a Comment

Oops!

Oops, you forgot something.

Oops!

The words you entered did not match the given text. Please try again.

Already a member? Sign In

1 Comment

Reply autohitkwn
4:55 PM on March 24, 2017 
удалите,пожалуйста! .



[email protected]