【发布时间】:2021-06-24 18:06:46
【问题描述】:
我有一个应用程序可以帮助用户预订会议(活动)。我必须为用户提供选择他/她自己的时区的机会,以便准确地计划和更改活动日期以及显示他/她的日程安排。我找到了包含近 400 个时区的 IANA 列表。我应该使用什么时区来覆盖尽可能多的用户。根据我的想法,用户不必寻找他/她的时区太久。
我发现一些网站使用了大约 100 个时区(越来越少)。
【问题讨论】:
标签: c# date time timezone iana
我有一个应用程序可以帮助用户预订会议(活动)。我必须为用户提供选择他/她自己的时区的机会,以便准确地计划和更改活动日期以及显示他/她的日程安排。我找到了包含近 400 个时区的 IANA 列表。我应该使用什么时区来覆盖尽可能多的用户。根据我的想法,用户不必寻找他/她的时区太久。
我发现一些网站使用了大约 100 个时区(越来越少)。
【问题讨论】:
标签: c# date time timezone iana
在涵盖整个世界的同时保持较小的时区列表确实是一个具有挑战性的问题。当然,你如何处理它完全取决于你。
您可能会考虑的一个建议是首先按国家(或地区)过滤列表。请参阅this demo,了解它在您的应用程序中的外观。
您可以使用我的TimeZoneNames 库来实现它。特别是,GetTimeZonesForCountry 方法非常适合。除了国家/地区之外,您还可以选择提供阈值日期以过滤掉在该日期之前不需要的历史时区。
例如,以下内容获取在巴西安排未来活动时所需的时区。它返回一个字典,其中键是 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á) |
...
【讨论】:
您应该找到用户使用的语言,然后找到使用该语言的人口最多的时区。但是,许多软件按时间顺序列出它们,这是您应该做的,以及列出带有时区的区域。这更像是一个基于意见的问题,但这是两种主要方式(好吧,实际上第二种方式是唯一的主要方式,但第一种方式可行)。
【讨论】: