Question

Comment définir le fuseau horaire Windows sur la machine locale par programme en C# ?L'utilisation d'un outil interactif n'est pas une option car les unités distantes n'ont ni interface utilisateur ni utilisateurs.La machine distante exécute .NET 2.0 et Windows XP Embedded et une application locale qui communique avec un serveur central (via un service Web) pour une direction automatisée de ses tâches.Nous pouvons envoyer une commande pour synchroniser une certaine combinaison heure/fuseau, mais quel code peut être mis dans l'application locale pour effectuer le changement ?L'équipement n'est pas imagé pour des emplacements spécifiques avant l'installation. Par conséquent, afin d'utiliser n'importe quel équipement à n'importe quel endroit, nous devons être en mesure de synchroniser ces informations.

Était-ce utile?

La solution

SetTimeZoneInformation devrait faire ce dont vous avez besoin.Vous devrez utiliser P/Invoquer pour y arriver.

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

Autres conseils

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

Santosh Vous avez vraiment raison.Rundll32 shell32.dll, contrôle_rundll% systemroot% system32 timedate.cpl ,, / z% 1 est déprécié pendant des années et ne fonctionnera pas sur 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 résoudra ce problème.

Essaye ça...

Tout d'abord, vous devez trouver, dans le registre, le clé qui représente la zone souhaitée (« Central Standard Time » est un exemple).Ceux-ci se trouvent ici :

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\Version actuelle\Fuseaux horaires

Donc, dans cet esprit, créez un fichier batch, "SetTimeZone.bat" contenant la ligne suivante :

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

Depuis C#, appelez :

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

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

Vous souhaiterez peut-être utiliser UTC, puis calculer l'heure dans chaque fuseau horaire.

Au lieu de simplement définir le fuseau horaire de certains systèmes, vous devriez envisager d'utiliser le service de temps Windows.Il ne gérera pas seulement le fuseau horaire.Il veillera également lui-même aux réglages corrects de la date et de l’heure.

Jeter un coup d'œil à: Comment synchroniser l'heure avec le service Windows Time sous Windows XP

Même si vous allez peut-être effectuer tous ces réglages sous Vista ou Windows 7, jetez un œil à ça ici.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top