gpt4 book ai didi

c# - GetSystemTimeZones 缺少 GMT 标准时间

转载 作者:可可西里 更新时间:2023-11-01 12:52:22 27 4
gpt4 key购买 nike

我一直在尝试使用 .net4 中的 TimeZoneInfo.GetSystemTimeZones 来替换我们使用 COM 调用某些 MFC 代码的旧方法。但是,我不得不恢复到 COM 方法,因为 GetSystemTimeZones 不会返回所有时区。位于英国并且不在我们的选项列表中包括 GMT 标准时间是一个问题。

当我查看注册表时,我发现 GMT Standard Time 有一个 Dynamic DST 子项,但没有定义任何规则。我下载了 .net4 源代码,在 TimeZoneInfo.cs 中,GetSystemTimeZones 最终调用了 TryCreateAdjustmentRules,如果 Dynamic DST 键没有定义 FirstEntry 或 LastEntry,它似乎返回 false。

            //
// 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 返回 false,TryGetTimeZoneByRegistryKey 抛出 InvalidTimeZoneException,这意味着 GMT 标准时间 不会添加到时区集合中。我试过删除空的 Dynamic DST 子键,但有些东西又把它们加回来了(可能是 Windows 更新)。

我已经做了很多搜索,但没有看到其他人报告过这个问题。我不确定是否有 GetSystemTimeZones 修复程序,或者我是否可以阻止首先出现的空 Dynamic DST 子项。有什么想法吗?

最佳答案

我猜这只是一个注册表问题。

此处概述了 WinXP/Server 2003 SP1 的类似内容。请查看以下内容是否有帮助: http://blogs.technet.com/b/dst2007/archive/2007/03/06/missing-time-zones-in-registry.aspx

我的猜测是您可以从另一台机器导出整个注册表项,并将其应用于有问题的框。

关于c# - GetSystemTimeZones 缺少 GMT 标准时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9636439/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com