GetSystemTimeZones fehlt die GMT-Standardzeit

8

Ich habe versucht, TimeZoneInfo.GetSystemTimeZones in .net4 zu verwenden, um unsere alte Methode zu ersetzen, die COM verwendet, um in einigen MFC-Code aufzurufen. Ich musste jedoch zur COM-Methode zurückkehren, da GetSystemTimeZones nicht alle Zeitzonen zurückgibt. Es ist ein Problem, in Großbritannien zu sitzen und GMT Standard Time nicht in unsere Liste der Optionen aufzunehmen.

Wenn ich in die Registrierung schaue, finde ich, dass GMT Standard Time einen Dynamischen DST Unterschlüssel ohne Regeln hat. Ich habe den .net4-Quellcode heruntergeladen und in TimeZoneInfo.cs ruft GetSystemTimeZones schließlich TryCreateAdjustmentRules auf, das scheinbar false zurückgibt, wenn der Schlüssel Dynamic DST weder FirstEntry noch LastEntry definiert hat.

%Vor%

Da TryCreateAdjustmentRules false zurückgibt, löst TryGetTimeZoneByRegistryKey eine InvalidTimeZoneException aus, was bedeutet, dass GMT Standard Time nicht zur Zeitzonensammlung hinzugefügt wird. Ich habe versucht, die leeren Dynamic DST Unterschlüssel zu löschen, aber etwas fügt sie wieder ein (wahrscheinlich Windows Update).

Ich habe viele Suchen durchgeführt, aber ich habe niemanden gesehen, der dieses Problem gemeldet hat. Ich bin mir nicht sicher, ob es einen GetSystemTimeZones-Fix gibt oder ob ich den leeren Dynamic DST -Unterschlüssel an erster Stelle stoppen kann. Irgendwelche Ideen?

    
Richard Hawkins 09.03.2012, 15:17
quelle

3 Antworten

1

Es stellt sich heraus, dass das Problem mit unserem COM-Objekt und nicht mit dem .NET-Code ist. Der Code zum Lesen der Registrierung sollte nur lesen, aber es ruft fälschlicherweise RegCreateKey, um mehrere Aufrufe an den gleichen Registrierungszweig zu optimieren.

Wenn das COM-Objekt aufgrund einer neuen Version registriert ist (mit Administratorrechten), lädt es die Zeitzonen und erstellt Dynamische Sommerzeit für die lokale Zeitzone, die in meinem Fall GMT / UTC ist.

Administratoren, ich denke, diese Frage sollte zum Löschen markiert werden.

    
Richard Hawkins 27.04.2012, 13:30
quelle
1

Ich vermute, das ist nur ein Registry-Problem.

Ähnliches wird hier für WinXP / Server 2003 SP1 beschrieben. Bitte schauen Sie, ob das Folgende hilft: Ссылка

Ich schätze, Sie könnten den gesamten Registrierungsschlüssel von einem anderen Computer exportieren und ihn auf Ihre problematische (n) Box (en) anwenden.

    
JFish222 25.04.2012 22:06
quelle
0

Nachdem Sie Ihr Problem analysiert und den Code ausgeführt haben, den Sie in den Kommentaren angegeben haben, um eine Liste mit Zeitzonen auszudrucken, kann ich GMT nicht auf meinem System anzeigen. Ich verwende Windows 7 Professional und die Auswahl von GMT ist einfach keine Option. Ich weiß, dass das dein Problem nicht löst und du - wie viele andere Leute - klingt, als müsstest du das wirklich mit GMT machen.

Wenn es Ihnen aber möglich erscheint, wenn Sie eine Möglichkeit sehen, UTC zu verwenden, dann würde ich diese Links überprüfen:

Windows 7 fehlende Unterstützung für GMT

Konvertieren von UTC in GMT

Nur eine weitere mögliche Antwort auf Ihr Problem, gibt es trotzdem können Sie einen Wrapper um die UTC-Werte erstellen, um GMT anzuzeigen? Ich frage, weil dieses Problem nicht so aussieht, als würde es in absehbarer Zeit verschwinden. Selbst wenn Sie es jetzt zur Arbeit bringen - in Zukunft könnte es wieder brechen. Wenn ich eine Methode dazu finde, werde ich meine Antwort aktualisieren.

    
dyslexicanaboko 25.04.2012 22:35
quelle

Tags und Links