TimeZoneInfo.FindSystemTimeZoneById()不适用于“海湾标准时间”

时间:2018-12-10 12:15:01

标签: c# asp.net timezone

我正在使用以下代码来获取“海湾标准时间”的时区详细信息,但其抛出错误如下

在本地计算机上找不到时区ID“海湾标准时间”。

下面是我正在使用的代码行

TimeZoneInfo tZone = TimeZoneInfo.FindSystemTimeZoneById("Gulf Standard Time");

您能告诉我我检查过的代码及其正确的时区名称究竟是什么问题。

1 个答案:

答案 0 :(得分:1)

如评论中所指出,"Gulf Standard Time"不是有效的Windows时区标识符。

海湾标准时间通常是指UTC + 04:00,没有DST,如在阿拉伯联合酋长国和阿曼as described here中所观察到的。 Windows中相应的时区以英语显示名称(UTC+04:00) Abu Dhabi, Muscat出现,并具有相应的ID Arabian Standard Time

因此在.NET中:

TimeZoneInfo tZone = TimeZoneInfo.FindSystemTimeZoneById("Arabian Standard Time");
Console.WriteLine(tzone.DisplayName);

// prints:  (UTC+04:00) Abu Dhabi, Muscat

要获取支持的时区列表,请在您的.NET代码中使用TimeZoneInfo.GetSystemTimeZones(),然后检查IdDisplayName属性。或者,您可以在命令行上调用TZUTIL /L来列出它们。

此外,仅指出所有这些都假设您正在Windows上运行。如果您实际上是在非Windows系统(Linux,OSX等)上运行.NET Core,则应使用IANA时区ID。在这种情况下,"Asia/Dubai""Asia/Muscat"都是合适的。

如果您的代码可以同时在Windows和非Windows系统上运行,那么您将需要利用我的TimeZoneConverter库。