奇怪的是,TimeZone.CurrentTimeZone.StandardName
按照计算机显示语言返回本地化名称。我想要一个程序化标识符,我可以在以下代码中为TimeZoneInfo
提供。
TimeZoneInfo timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(timeZone);
FindSystemTimeZoneById
需要一个独特的非本地化程序标识符
我将计算机显示语言改为中文,当我TimeZone.CurrentTimeZone.StandardName
时,我得到了一个本地化的unicode字符串。然而,价值是正确的,但它本地化在计算机显示语言中,这是我不想要的。
我现在没有使用TimeZoneInfo.Local.Id
的选项,因为我的项目是在.Net 2.0中。我还有什么其他选择来获取非本地化的时区标识符?
答案 0 :(得分:2)
要在不能使用TimeZoneInfo.Local.Id
课程的情况下获得相等的TimeZoneInfo
,您必须直接进入注册表。
在.NET 2.0 C#中,您可以使用以下方法检索它:
private static string GetLocalTimeZoneId()
{
RegistryKey key = Registry.LocalMachine.OpenSubKey(
@"SYSTEM\CurrentControlSet\Control\TimeZoneInformation");
string value = (string)key.GetValue("TimeZoneKeyName");
if (string.IsNullOrEmpty(value))
value = (string)key.GetValue("StandardName");
key.Close();
return value;
}
Windows Vista及更高版本具有TimeZoneKeyName
值,并且@tzres.dll
值中包含StandardName
指针条目。
在Windows Vista之前,StandardName
值包含密钥名称,并且未进行本地化。
以上代码说明了这两种变体。