localization - 如何在 NodaTime 中获取时区列表
问题描述
如何从 NodaTime 获取“时区”列表,以便我可以制作如下 UI 供我的用户选择?
我想显示 UTC 偏移量,然后显示相应的城市/国家/地区。它不需要完全像下面的那样,但你知道的,很接近。
DateTimeZone
没有 name 属性,并且ing 产生重复项(来自fromToString()
的列表)。Ids
IDateTimeZoneProvider
我看到你可以从〜国家到地区,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}\"");
}
输出(截断):
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"
...
显示名称来自 Windows 语言包。ID 通过 CLDR 从 Windows 转换为 IANA。如果您想要 Windows ID,则可以设置useIanaZoneIds
为false
(或省略它)。
推荐阅读
- java - 无法通过请求生成器发送 post 参数
- google-cloud-platform - 为 pod 和服务配置 Terraform GKE 插件 IP 范围
- python - 如何确定初始猜测值并最小化以找到参数
- arrays - MongoDB:使用数组进行聚合
- ms-access - 将列表框中的选定项目与单选按钮相结合保存到新字段中
- javascript - jQuery 不在 Primefaces 视图中执行?
- java - 比较两个文本时如何找到不相似的行
- c++ - 如何访问一行 C++ 字符矩阵?
- angular - 向 Angular 材质禁用字段添加验证
- algorithm - Fence - 波兰信息学奥林匹克竞赛的任务