Я пытаюсь использовать TimeZoneInfo.GetSystemTimeZones в .net4, чтобы заменить наш старый метод, который использует COM для вызова некоторого кода MFC. Однако мне пришлось вернуться к методу COM, потому что GetSystemTimeZones не возвращает все часовые пояса. Проблема заключается в том, что в нашем списке вариантов, основанных в Великобритании, а не в стандартном времени GMT в нашем списке вариантов.GetSystemTimeZones отсутствует GMT Стандартное время
Когда я смотрю в реестре, я считаю, что GMT Standard Time имеет Dynamic DST подключ без правил, определенных. Я загрузил исходный код .net4 и, в TimeZoneInfo.cs, GetSystemTimeZones в конечном итоге вызывает TryCreateAdjustmentRules, который, как представляется, возвращает false, если ключ Dynamic DST не имеет определенных параметров FirstEntry или LastEntry.
//
// loop over all of the "<time_zone_name>\Dynamic DST" hive entries
//
// read FirstEntry {MinValue - (year1, 12, 31)}
// read MiddleEntry {(yearN, 1, 1) - (yearN, 12, 31)}
// read LastEntry {(yearN, 1, 1) - MaxValue }
// read the FirstEntry and LastEntry key values (ex: "1980", "2038")
Int32 first = (Int32)dynamicKey.GetValue(c_firstEntryValue, -1, RegistryValueOptions.None);
Int32 last = (Int32)dynamicKey.GetValue(c_lastEntryValue, -1, RegistryValueOptions.None);
if (first == -1 || last == -1 || first > last) {
rules = null;
return false;
}
Как TryCreateAdjustmentRules возвращает ложь, TryGetTimeZoneByRegistryKey бросает InvalidTimeZoneException что означает GMT Standard Time не добавляется в коллекцию часового пояса. Я попытался удалить пустые Dynamic DST, но что-то добавляет их обратно (возможно, Windows Update).
Я сделал много поиска, но не видел, чтобы кто-либо еще сообщал об этой проблеме. Я не уверен, есть ли исправление GetSystemTimeZones или я могу остановить пустой раздел Dynamic DST. Есть идеи?
Это очень странно - «GMT Стандартное время» определенно вернулось для меня. Не могли бы вы опубликовать код, который вы используете, чтобы определить, что он отсутствует? Это, наверное, хорошо, но поскольку мы видим нечетные результаты ... –
Ненавижу говорить об этом, но он работает в моей системе, я в Великобритании, и я вижу «GMT Standard Time» в возвращаемых 101 значениях. Вы пробовали это в другой системе? – Lazarus
Jon, имеет ли ваш раздел времени GMT GMT Time пустой пусковой раздел DST? –