如何过滤时区?

How do I filter timezones?

我正在创建一个 Web 应用程序,它将为用户提供可用时区列表。但是,我不想看到整个时区列表,因为它很长而且我不需要一两个国家以外的任何东西。有没有办法针对特定时区或基于国家/地区甚至多个国家/地区进行过滤?

在 Noda Time 中,您可以使用 TzdbDateTimeZoneSource.Default.ZoneLocations 中存储的位置信息按国家/地区过滤 TZDB 时区。

每个ZoneLocation都有一个ZoneId(比如America/Los_Angeles)和一个两个字母的国家代码,比如"US"。您可以使用它来过滤某个国家/地区的时区,as shown in this answer

该方法的唯一缺点是您仍然只剩下时区 ID 来向用户显示。如果您想显示更友好的内容,例如 "Eastern Time" 或 "Central European Time",这些值不在 Noda Time 中。相反,您可以使用 TimeZoneNames library.

使用 TimeZoneNames,您可以执行的一项操作是获取时区及其 ID 和特定语言的本地化显示名称。例如:

var zones = TZNames.GetTimeZonesForCountry("US", "en");

有关其他操作和示例输出,请参阅 TimeZoneNames 自述文件。