2 votes

Réglage du fuseau horaire à distance en C#

Comment régler le fuseau horaire de Windows sur la machine locale de manière programmatique en C# ? L'utilisation d'un outil interactif n'est pas envisageable car les unités distantes n'ont pas d'interface utilisateur ni d'utilisateurs. La machine distante fonctionne avec .NET 2.0 et Windows XP Embedded et une application locale qui communique avec un serveur central (via un service web) pour la direction automatisée de ses tâches. Nous pouvons envoyer une commande de synchronisation avec une certaine combinaison d'heures et de zones, mais quel code peut-on mettre dans l'application locale pour effectuer ce changement ? L'équipement n'est pas imagé pour des emplacements spécifiques avant l'installation, donc pour pouvoir utiliser n'importe quel équipement à n'importe quel endroit, nous devons être capables de synchroniser ces informations.

3voto

SetTimeZoneInformation devrait faire ce dont vous avez besoin. Vous aurez besoin d'utiliser P/Invocation pour l'atteindre.

Notez également que vous devrez posséder et activer le privilège SE_TIME_ZONE_NAME.

1voto

Santhosh Points 11

Cela ne fonctionne pas sous Windows 7. J'ai essayé avec l'environnement suivant Windows 7 VSTS-2008 Il ouvre la fenêtre de changement de fuseau horaire comme nous le faisons manuellement.

1voto

offler Points 11

santosh vous avez tout à fait raison. RunDLL32 shell32.dll,Control_RunDLL %SystemRoot%. \system32\TIMEDATE.cpl ,,/Z %1 est obsolète depuis des années et ne fonctionnera pas sous Windows 2008, R2, Vista, 7, ... oh, oui j'ai remarqué que ce forum semble avoir un bug complet avec la reconnaissance de la touche entrée. peut-être qu'un jour le programmeur corrigera ce problème.

0voto

Jason Bunting Points 27534

Essayez ceci...

Tout d'abord, vous devez trouver, dans le registre, l'élément suivant clé qui représente la zone que vous voulez ("Central Standard Time" est un exemple). Vous les trouverez ici :

HKEY_LOCAL_MACHINE \Software\Microsoft\Windows NT \Current Version \Time Zones

Donc, avec cela en tête, créez un fichier batch, "SetTimeZone.bat" avec la ligne suivante dedans :

RunDLL32 shell32.dll,Control_RunDLL %SystemRoot% \system32\TIMEDATE.cpl ,,/Z %1

Depuis C#, appelez :

System.Diagnostics.Process.Start("SetTimeZone.bat", "La clé du fuseau horaire que vous voulez définir") ;

0voto

Brian Leahy Points 7840

Vous courrez le risque d'avoir des données incorrectes si vous n'utilisez pas l'UTC pour transmettre les dates... Si vous changez de fuseau horaire sur l'appareil... vos dates seront encore plus fausses.

Vous pouvez utiliser l'UTC, puis calculer l'heure dans chaque fuseau horaire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X