【问题标题】:most used timezones support in the web applicationWeb 应用程序中最常用的时区支持
【发布时间】:2021-06-24 18:06:46
【问题描述】:

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

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

【问题讨论】:

    标签: c# date time timezone iana


    【解决方案1】:

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

    您可能会考虑的一个建议是首先按国家(或地区)过滤列表。请参阅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á)

    ...

    【讨论】:

    • 请注意 TimeZoneNames 是一个相当大的库。不过在服务器上应该没问题。此外,.NET 还没有能力直接进行国家或阈值过滤,但有可能有一天会实现。如果是这样,请改用它。
    • 根据用户国家过滤时区是个好主意,谢谢。这个案例对我来说非常有用,因为用户应该选择一个国家才能成功注册
    • ...只要他们只能在自己的国家注册“事件”。如果它们是虚拟事件(在线、通过电话等),那么您不希望将国家/地区严格限制在他们在用户注册中设置的国家/地区。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-24
      • 1970-01-01
      • 2014-04-04
      • 2021-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多