Web 应用程序中最常用的时区支持

most used timezones support in the web application

我有一个应用程序可以帮助用户预订会议(活动)。我必须为用户提供选择 his/her 自己时区的机会,以便准确计划和更改事件日期以及显示 his/her 时间表。我找到了包含近 400 个时区的 IANA 列表。我应该使用什么时区来覆盖尽可能多的用户。按照我的想法,用户不必寻找太长的his/her时区。

我发现一些网站使用了大约 100 个时区(越来越少)。

您应该找到用户使用的语言,然后找到使用该语言的人口最多的时区。然而,许多软件按时间顺序列出它们,这是你应该做的,以及列出带有时区的区域。这更像是一个基于意见的问题,但这是两种主要方式(好吧,实际上第二种方式是唯一的主要方式,但第一种方式可行)。

保持一个小的时区列表同时仍然覆盖整个世界确实是一个具有挑战性的问题。当然,您如何处理它完全取决于您。

您可能会考虑的一个建议是首先按国家(或地区)过滤列表。请参阅 this demo 了解它在您的应用程序中的外观。

您可以使用我的 TimeZoneNames 库来实现它。特别是,GetTimeZonesForCountry 方法非常适合。除了国家/地区之外,您还可以选择提供阈值日期以过滤掉该日期之前不需要的历史时区。

例如,以下获取在巴西安排未来活动时所需的时区。它 returns 一个字典,其中键是 IANA 时区 ID,值是显示给用户的本地化显示名称,在本例中为巴西葡萄牙语。

var zones = TZNames.GetTimeZonesForCountry("BR", "pt-BR", DateTimeOffset.UtcNow);

输出:

Key Value
America/Rio_Branco Horário do Acre
America/Manaus Horário do Amazonas (Manaus)
America/Cuiaba Horário do Amazonas (Cuiabá)
America/Bahia Horário de Brasília (Bahia)
America/Sao_Paulo Horário de Brasília (São Paulo)
America/Noronha Horário de Fernando de Noronha

有关更多示例,请参阅 TimeZoneNames 站点上的自述文件。

如果您想要一个单一的列表而不是按国家/地区过滤,您可以考虑的另一种方法是使用 Windows 显示名称,它的列表比 IANA 短得多。 TimeZoneNames 也有这些,并且无论您是否托管在 Windows 上都可以使用。

例如,以下获取巴西葡萄牙语的 Windows 显示名称及其关联的 IANA 时区 ID。

var displayNames = TZNames.GetDisplayNames("pt-BR", true);

部分输出:

Key Value
Etc/GMT+12 (UTC-12:00) Linha de Data Internacional Oeste
Etc/GMT+11 (UTC-11:00) Tempo Universal Coordenado-11
America/Adak (UTC-10:00) Ilhas Aleutas
Pacific/Honolulu (UTC-10:00) Havaí
Pacific/Marquesas (UTC-09:30) Ilhas Marquesas
America/Anchorage (UTC-09:00) Alasca
Etc/GMT+9 (UTC-09:00) Tempo Universal Coordenado-09
America/Whitehorse (UTC-07:00) Yukon
America/Tijuana (UTC-08:00) Baja Califórnia
Etc/GMT+8 (UTC-08:00) Tempo Universal Coordenado-08
America/Los_Angeles (UTC-08:00) Hora do Pacífico (EUA e Canadá)
America/Phoenix (UTC-07:00) Arizona
America/Chihuahua (UTC-07:00) Chihuahua, La Paz, Mazatlan
America/Denver (UTC-07:00) Hora das Montanhas (EUA e Canadá)
America/Guatemala (UTC-06:00) América Central
America/Chicago (UTC-06:00) Hora Central (EUA e Canadá)

...