- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我一直在尝试使用 .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/
这个问题在这里已经有了答案: Getting system Timezones in different languages (4 个答案) 关闭 7 年前。 我想获取时区列表,以便我可以填充下拉列
如果我用 foreach (TimeZoneInfo info in TimeZoneInfo.GetSystemTimeZones()) { if (info.ToString()... 获
TimeZoneInfo.GetSystemTimeZones() 为您提供所有时区的枚举。问题是如何仅为特定国家代码选择条目。我知道 UTC 偏移量和国家/地区代码,并且需要能够选择正确的时区值。
我一直在尝试使用 .net4 中的 TimeZoneInfo.GetSystemTimeZones 来替换我们使用 COM 调用某些 MFC 代码的旧方法。但是,我不得不恢复到 COM 方法,因为 G
在我们的 C# 应用程序中,我们支持多种语言。现在,如果应用程序语言是英语,而我们的应用程序安装的操作系统是非英语(比如西类牙语)。当我尝试使用 TimeZoneInfo.GetSystemTimeZ
我遇到了一个似乎无法解决的奇怪问题。当我在我的 Win 7 x64 机器上调用 TimeZoneInfo.GetSystemTimeZones 时,我得到了 101 个结果。当我对其中的每一个调用 T
所以我一直在努力解决的问题是在 .net 4 (C#) 中提取时区列表以填充表单上的下拉列表。我知道我可以做到这一点: var TimeZoneList = TimeZoneInfo.GetSyste
我希望 TimeZoneInfo.GetSystemTimeZones().Single(x => x.Id == anId) 总是给出相同的结果 TimeZoneInfo.FindSystemTim
我是一名优秀的程序员,十分优秀!