微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

GetSystemTimeZones缺lessGMT标准时间

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

当我查看registry时,我发现GMT标准时间有一个没有定义规则的dynamicDST子项。 我下载了.net4源代码,在TimeZoneInfo.cs中,GetSystemTimeZones最终调用TryCreateAdjustmentRules,如果dynamicDST键没有定义FirstEntry或LastEntry,则TryCreateAdjustmentRules返回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,31)} // read LastEntry {(yearN,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,RegistryValueOptions.None); if (first == -1 || last == -1 || first > last) { rules = null; return false; }

由于TryCreateAdjustmentRules返回false,因此TryGetTimeZoneByRegistryKey将引发InvalidTimeZoneException,这意味着GMT标准时间不会被添加到时区集合中。 我已经尝试删除空的dynamicDST子项,但东西又添加回来(可能是Windows更新)。

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

有没有一种方法可以告诉一个进程启动之前,或启动后在Windows上使用哪个IP地址?

在应用程序启动时禁用Windows服务

Windows批处理脚本中的文件/文件夹select器对话框

AsyncIO.ForceDotNet.Force()导致Windows XP上的内存泄漏

使用ServiceController类与Windows Service进行通信

如何创build防止“服务器模式SSL必须使用带有关联私钥的证书”exception的X509证书?

C#:没有完全扩展的环境variables?

一个完整的user32.dll包装库可用于.NET?

当声音输出停止时,使用Powershell自动点击鼠标?

了解vs2010的基本Windows编程

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

WinXP / server 2003 SP1在这里概述了类似的内容。 请参阅以下帮助: http : //blogs.technet.com/b/dst2007/archive/2007/03/06/missing-time-zones-in-registry.aspx

我的猜测是你可以从另一台机器上导出整个注册表项,并将其应用到有问题的盒子中。

事实证明,问题是与我们的COM对象,而不是.NET代码。 阅读注册表的代码应该只是读取,但它错误调用RegCreateKey优化多个调用到相同的注册表分支。

当COM对象由于新版本而被注册(具有管理员权限)时,它加载时区并为本地时区(在本例中为GMT / UTC)创建动态DST 。

管理员,我想这个问题应该被标记删除

看了你的问题,甚至运行你在评论中提供的代码,打印出一个时区列表,我不能让GMT显示在我的系统上。 我正在运行Windows 7专业版,选择GMT不是一个选项。 我知道这并不能解决你的问题,而你 – 就像很多其他人一样 – 听起来就像你真的需要把这个和GMT一起工作。

但是,如果可能的话,如果你看到使用UTC的方法,那么我会检查出这些链接

Windows 7缺乏对GMT的支持

将UTC转换为GMT

只是你的问题的另一个可能的答案,无论如何,你可以创建一个围绕UTC值来显示GMT的包装? 我问,因为这个问题似乎不会马上消失。 即使你现在开始工作 – 在未来它可能会再次破裂。 如果我想出一个方法,我会更新我的答案。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐