我有一个程序在C#上运行以下代码:
TimeZoneInfo localZone = TimeZoneInfo.Local;
string timeZone = TimeZoneInfo.FindSystemTimeZoneById(localZone.Id).ToString();
MessageBox.Show("Local Time Zone ID: " + timeZone);
当我运行它时,我得到以下异常:
System.TimeZoneNotFoundException:在本地计算机上找不到时区ID“Malay Peninsula Standard Time” .
我对代码稍作修改并使用了这一行:
TimeZoneInfo localZone = TimeZoneInfo.Local;
MessageBox.Show("Local Time Zone ID: " + localZone.StandardName);
而这次我也不例外,我收到了时区“马来半岛标准时间”的弹出消息
为什么第一段代码不起作用?
1 回答
过了一段时间(天),我终于发现了发生了什么 .
调试代码,我看到
TimeZoneInfo.Local.Id
正在检索以下值:马来半岛标准时间
我做了一些调查,发现服务器的所有时区都存储在这个注册表项中:
HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Time Zones \
如果您浏览它们,您将看到没有键被称为“马来半岛标准时间”,该时区的值是“新加坡标准时间” . 该时区的全部信息如下:
所以,如你所见,我正在寻找的ID不存在,这就是我得到该异常的原因 . 我将注册表项重命名为“马来半岛标准时间”,问题就消失了 .