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

本文关键字:时区 问题 标准时间 马来半岛 | 更新日期: 2023-09-27 18:04:30

我有一个程序,在c#上运行以下代码:

TimeZoneInfo localZone = TimeZoneInfo.Local;
string timeZone = TimeZoneInfo.FindSystemTimeZoneById(localZone.Id).ToString();
MessageBox.Show("Local Time Zone ID: " + timeZone);

当我运行这个时,我得到了以下异常:

系统。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'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不存在,这就是为什么我得到了那个异常。我将注册表项重命名为"马来半岛标准时间",问题就解决了。