“马来半岛标准时间”的时区问题

时间:2015-07-23 13:54:06

标签: c# time

我有一个在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 个答案:

答案 0 :(得分:1)

经过一段时间(天),我终于发现了发生了什么。

调试代码,我看到TimeZoneInfo.Local.Id正在检索以下值:

马来半岛标准时间

我做了一些调查,发现服务器的所有时区都存储在这个注册表项中:

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Time Zones \

如果您浏览它们,您将看到没有按键被调用"马来半岛标准时间",该时区的值是"新加坡标准时间"。该时区的全部信息如下:

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并不存在,这就是我获得该异常的原因。我将注册表项重命名为"马来半岛标准时间"问题就消失了。