这不是 Noda Time 的当前功能,因此您需要从其他地方获取数据。
时区(和其他项目)的本地化最好在统一码CLDR http://cldr.unicode.org/项目。您可以编写代码来解析 CLDR 版本中包含的各种 XML 文件。您还需要了解数据的表示方式以及一些边缘情况。
或者,您可以使用我已经完成的实施 https://github.com/mj1856/TimeZoneNames.
安装时区名称 https://www.nuget.org/packages/TimeZoneNames努吉特包:
PM> Install-Package TimeZoneNames
然后您可以轻松地将时区名称解析为本地化的显示值:
// example input values
var names = TZNames.GetNamesForTimeZone("America/Los_Angeles", "en-US");
// example output values
Assert.Equal("Pacific Time", names.Generic);
Assert.Equal("Pacific Standard Time", names.Standard);
Assert.Equal("Pacific Daylight Time", names.Daylight);
这也适用于非英语语言环境。只要数据存在于 CLDR 中,它将生成任何语言的有效文本。
同一库还可用于获取特定国家/地区的时区 ID 列表。这可用于实现两个下拉选择列表,首先您选择国家/地区,然后选择该国家/地区内的时区。
var zones = TZNames.GetTimeZoneIdsForCountry("US");
你可以看一下项目的单元测试 https://github.com/mj1856/TimeZoneNames/blob/master/TimeZoneNames.Tests/TimeZoneNamesTest.cs获取更多示例。