我有一个在 C# 上运行以下代码的程序:
TimeZoneInfo localZone = TimeZoneInfo.Local;
string timeZone = TimeZoneInfo.FindSystemTimeZoneById(localZone.Id).ToString();
MessageBox.Show("Local Time Zone ID: " + timeZone);
当我运行此程序时,出现以下异常:
System.TimeZoneNotFoundException:在本地计算机上找不到时区 ID“马来半岛标准时间”。
我对代码做了一点修改并使用了这一行:
TimeZoneInfo localZone = TimeZoneInfo.Local;
MessageBox.Show("Local Time Zone ID: " + localZone.StandardName);
这次也不例外,我收到了时区为“马来半岛标准时间”的弹出消息
为什么第一段代码不起作用?
一段时间(几天)后,我终于知道发生了什么事。
调试代码,我看到了TimeZoneInfo.Local.Id
正在检索以下值:
马来半岛标准时间
我做了一些调查,发现服务器的所有时区都存储在这个注册表项中:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\时区\
如果您浏览它们,您会发现没有键称为“马来半岛标准时间”,该时区的值是“新加坡标准时间”。该时区的全部信息如下:
ID: Singapore Standard Time
Display Name: (GMT+08:00) Kuala Lumpur, Singapore
Standard Name: Malay Peninsula Standard Time
Daylight Name: Malay Peninsula Daylight Time ***Does Not Have Daylight Saving Time***
Offset from UTC: 8 hours, 0 minutes
Number of adjustment rules: 0
因此,如您所见,我正在查找的 ID 不存在,这就是我收到该异常的原因。我将注册表项重命名为“马来半岛标准时间”,问题就消失了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)