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

时间:2010-11-23 09:13:12

标签: 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

例如, HST Pacific / Honolulu Pacific / Johnston 之间有什么区别?他们似乎都使用夏威夷标准时间,为什么数据库中有3个条目?

  • 我的最终目标是在网络应用中创建用户偏好的时区列表。

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

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

3 个答案:

答案 0 :(得分:14)

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

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

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

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

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

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

请记住,这需要您手动预先确定常用时区的内容。

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

答案 1 :(得分:6)

CLDR数据包含“重要”时区列表,可能用于挑选要显示的时区。 (我还记得其他的东西,但this是我现在能找到的最好的东西)

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

答案 2 :(得分:1)

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