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

Dav*_*rks 21 java timezone jodatime

下面是从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
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Jes*_*ebb 14

我认为你假设"用户友好"意味着向他们展示一个小清单.事实是,所有这些时区都被某人用于某个地方.它们看起来可能与你相同,但它们的行为往往略有不同.我住在萨斯喀彻温省,我们有自己的CST版本.长名称只是"中央标准时间",但我们不使用夏令时,因此在一年的一半时间内,我们不会使用真正的CST.萨斯喀彻温省甚至还有一个小区域,时间差15分钟.即使它们看起来相同,它们也是不同的,我认为你应该允许用户从整个列表中进行选择.

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

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

Canada
United States
------------------
Argentina
Australia
...
Run Code Online (Sandbox Code Playgroud)

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

EST
CST
MST
PST
------------------
Hawaii
Saskatchewan
...
Run Code Online (Sandbox Code Playgroud)

但请记住,这将要求您手动预先确定公共时区是什么.

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


Jod*_*hen 6

CLDR数据中包含的"重要的"时区的列表,甚至能够被用来挑选那些显示.(我记得别的东西,但是是我能找到的最好的了)

如果过去数据不同,或者地点已重命名(时区数据中的别名功能),则同一地点将存在多个时区ID.在编译时区数据时删除后向文件将删除大多数别名.

  • 我无法找到此重要时区的CLDR列表.任何人都可以提供直接链接吗? (6认同)