And*_*ock 5 .net timezone localization nodatime
如何从 NodaTime 获取“时区”列表,以便我可以制作如下所示的 UI 供用户选择?
我想显示 UTC 偏移量,然后显示相应的城市/国家/地点。它不需要与下面的完全一样,但你知道,很接近。
DateTimeZone没有 name 属性,并且ing 会产生重复项(来自fromToString()的列表)。IdsIDateTimeZoneProvider
我看到你可以从〜国家到地区,但这TzdbDateTimeZoneSource.Default.ZoneLocations也不是我正在寻找的。我可以看到如何将这两个数据源拼凑在一起,但这感觉像是一个已解决的问题,我不应该重新发明。
您可以使用我的TimeZoneNames库获取显示名称及其相应的 IANA 时区 id 的列表,适合以您描述的方式构建下拉列表。生成的 ID 与 NodaTime 的 TZDB 提供程序兼容。
// You can either hardcode the language (ex: "en-US"), or get it from .NET globalization:
var languageCode = CultureInfo.CurrentUICulture.Name;
// Then get the names, as a list of key/value pairs
var list = TZNames.GetDisplayNames(languageCode, useIanaZoneIds: true);
// Use them as you wish. For example:
foreach (var name in list)
{
Console.WriteLine($"{name.Key} = \"{name.Value}\"");
}
Run Code Online (Sandbox Code Playgroud)
输出(截断):
Etc/GMT+12 = "(UTC-12:00) International Date Line West"
Etc/GMT+11 = "(UTC-11:00) Coordinated Universal Time-11"
America/Adak = "(UTC-10:00) Aleutian Islands"
Pacific/Honolulu = "(UTC-10:00) Hawaii"
Pacific/Marquesas = "(UTC-09:30) Marquesas Islands"
America/Anchorage = "(UTC-09:00) Alaska"
Etc/GMT+9 = "(UTC-09:00) Coordinated Universal Time-09"
America/Tijuana = "(UTC-08:00) Baja California"
Etc/GMT+8 = "(UTC-08:00) Coordinated Universal Time-08"
America/Los_Angeles = "(UTC-08:00) Pacific Time (US & Canada)"
America/Phoenix = "(UTC-07:00) Arizona"
America/Chihuahua = "(UTC-07:00) Chihuahua, La Paz, Mazatlan"
America/Denver = "(UTC-07:00) Mountain Time (US & Canada)"
America/Guatemala = "(UTC-06:00) Central America"
America/Chicago = "(UTC-06:00) Central Time (US & Canada)"
Pacific/Easter = "(UTC-06:00) Easter Island"
...
Run Code Online (Sandbox Code Playgroud)
显示名称源自 Windows 语言包。ID 通过 CLDR 从 Windows 转换为 IANA。如果您想要 Windows ID,则可以设置useIanaZoneIds为false(或省略它)。
另请参阅列出时区的方法和TimeZoneNames 文档中的致谢。
Noda Time 目前不提供面向用户的时区字符串,不。
最好的数据来源是CLDR。我们对此有一个长期存在的问题,但不幸的是它从根本上来说很棘手。在某个时候我想回到它,但我还没有找到时间:(
您可以使用Onism.Cldr项目来访问 CLDR 数据。不过,您需要从两个方面了解 CLDR 数据的工作原理:
抱歉,目前的答案实际上只是“不,没有任何现成的东西” - 但这就是现实:(