代码之家  ›  专栏  ›  技术社区  ›  David Parks

为用户首选项创建用户友好的时区列表

  •  21
  • David Parks  · 技术社区  · 14 年前

    下面是从java返回的时区列表片段(我使用JodaTime打印了时区偏移量、时区ID和长名称)。

    (GMT-10:00) HST, Hawaii Standard Time     
    (GMT-10:00) Pacific/Apia, -10:00
    (GMT-10:00) Pacific/Fakaofo, Tokelau Time
    (GMT-10:00) Pacific/Honolulu, Hawaii Standard Time
    (GMT-10:00) Pacific/Johnston, Hawaii Standard Time
    

    有什么区别 高速列车 , 太平洋/檀香山 ,和 太平洋/约翰斯顿 ,例如他们似乎都在使用 夏威夷标准时间 ,为什么数据库中有3个条目?

    • 我的最终目标是在web应用程序中创建用户首选项的时区列表。

    如果我使用tzDatabase中的所有时区,则列表很长,并且似乎有有效的重复项(如上图所示)。我可以列出唯一的长格式名称,如“夏威夷标准时间”,但我需要决定如何将其映射到使用相同长名称的任何时区。

    在这种情况下,其他人怎么办?如何创建一个用户友好的时区列表并将其映射到相关的java时区?

    3 回复  |  直到 14 年前
        1
  •  14
  •   Jesse Webb    14 年前

    我认为你是在假设“用户友好”意味着给他们一个小列表。但事实是,所有这些时区都被某个人在某处使用。他们在你看来可能是一样的,但他们的行为往往稍有不同。我住在萨斯喀彻温省,我们有自己的CST版本。长的名字只是“中央标准时间”,但我们不使用夏令时,所以半年,我们不符合真正的中央标准时间。萨斯喀彻温省甚至有一小块地区的时间相差15分钟。即使它们看起来相同,但它们是不同的,我认为您应该允许用户从整个列表中进行选择。

    试图 聪明地 缩短列表可能与允许用户选择首选货币时不列出所有可能的货币代码类似。是的,可能只有少数人会使用某些产品。当然,目前可能有一些转换率相同。最后,让用户决定他们关心什么。

    一种显示大列表或潜在列表的解决方案 不重要 只有几个真正感兴趣的项目的数据:首先确定常用的项目,然后将它们分隔到列表的顶部。这可以在各种选择国家的网站上看到,例如:

    Canada
    United States
    ------------------
    Argentina
    Australia
    ...
    

    这个策略也经常用于我以前的货币例子。对于时区,它可能看起来像这样(如果您的主要用户群在北美):

    EST
    CST
    MST
    PST
    ------------------
    Hawaii
    Saskatchewan
    ...
    

    但请记住,这需要您手动预先确定 常见的 时区是。

    我觉得最好的方法就是简单地列出 全部的 时区,按偏移量排序,因为 人们会知道在哪里可以找到基于偏移的区域。例如,我总是先找“-6:00”,而不是萨斯喀彻温省。希望这有帮助!

        2
  •  6
  •   JodaStephen    13 年前

    这个 CLDR 数据包含一个“重要”时区的列表,可以用来选择要显示的时区。(我还记得一些事情,但是 this 是我现在能找到的最好的)

    如果数据在过去是不同的,或者该位置已经被重命名(时区数据中的别名特征),那么对于同一个地方将存在多个时区ID。在编译时区数据时删除向后文件将删除大多数别名。

        3
  •  1
  •   Brad    14 年前

    时区是否使用夏令时可能是最常见的区别。