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

2022-09-02 01:42:59

下面是从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

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

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

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

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


答案 1

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

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

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

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

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

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

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

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


答案 2

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

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


推荐