2017-08-23 5 views
0

Sous Windows 7. Je suis en PST TimeZone. J'ai changé le fuseau horaire dans Windows à l'Est puis exécuté cela en LINQPad:Le changement de fuseau horaire sous Windows ne se reflète pas dans les appels C# TimeZone

TimeZoneInfo tzinfo = TimeZoneInfo.Local; 
tzinfo.Dump(); 

TimeZone localZone = TimeZone.CurrentTimeZone; 
    localZone.Dump(); 

enter image description here

enter image description here

Pourquoi est-ce pas montrant fuseau horaire de l'Est et pourquoi une structure montre fuseau horaire du Pacifique et la autre oriental?

+0

Le code n'a probablement pas été recompilé. LinqPad est seulement un simulateur et a probablement pris le fuseau horaire une fois compilé. – jdweng

+0

J'ai vérifié ce que vous avez dit et testé dans VS et il a montré à la fois orientale. Eh bien, c'est irritant à propos de Linqpad. Comment forcer une recompilation dans Linqpad autre que de le redémarrer? –

+0

Modifiez le code et il sera recompilé. – DavidG

Répondre

1

.NET Met en cache le fuseau horaire local. Si vous devez vous assurer que vous tenez compte des modifications apportées par l'utilisateur, vous devez appeler le TimeZoneInfo.ClearCachedData() avant d'obtenir le fuseau horaire local.

A partir de la documentation MSDN (Souligné par l'auteur):

données de fuseau horaire Cached comprend des données sur la zone de l'heure locale, la zone temps universel coordonné (UTC), et les fuseaux horaires qui sont récupérés en utilisant des méthodes tels que FindSystemTimeZoneById et GetSystemTimeZones.

Vous pourriez appeler la méthode ClearCachedData pour réduire la mémoire consacrée à la cache d'informations de fuseau horaire de l'application ou pour tenir compte du fait que le fuseau horaire du système local a changé.

Ceci s'applique probablement aussi dans LinqPad.